Java解析xml文件遇到特殊符号异常的情况(处理方案)
作者:朱季谦 发布时间:2023-10-23 17:31:48
标签:Java,xml文件,特殊符号
在一次Java解析xml文件的开发过程中,使用SAX解析时,出现了这样一个异常信息:
Error on line 60 of document : 对实体 "xxx" 的引用必须以 ';' 分隔符结尾;
我打开xml文件后,发现该“xxx"符号之前跟着一个”&“符号,后来了解到,这类符号在xml里属于一种特殊符号,而特殊符号若没用转义符表示,直接用到xml文件里,就会在使用SAX等方式做解析时出现奇怪的异常。
其实,这都是因为这些特殊字符造成的。
XML当 * 殊符号包括< > & ' "等,它们是不允许作为xml文件的PCDATA,若想使用话,需用转义符代替:
< <
> >
& &
" "
' '
那么,若要正常读取xml文件数据,应该如何使用转义符替换呢?
刚开始是想百度一番如何解决,却发现好多帖子都是好几年前的,且都没有写清楚怎么个解决方法,大多都是提到是特殊符号引起的解析异常,但怎么过滤掉,显得含糊其辞,因此,只能自己胡乱捣鼓一番,捣鼓出一个比较合适的将特殊字符过滤的方案。
实现思路其实很简单,我们可以在读取xml文件使用SAX解析前,先把xml文件通过Reader读取,然后按行读取出来拼接成一个String字符串,再使用字符串的替换方法replaceAll()将特殊符号进行替换,替换后,就可以将字符串形式的xml直接转成Document对象做xml解析了:
String xmlStr=s.replaceAll("&","&");
转换方法代码如下:
StringBuffer buffer = new StringBuffer();
BufferedReader bf= new BufferedReader(new FileReader("D:\\测试.xml"));
String s = null;
while((s = bf.readLine())!=null){
buffer.append(s.trim());
}
String str = buffer.toString();
//在这一步进行字符替换,替换成合法转义字符
String xml=str.replaceAll("&","&");
//这里就可以将处理过的xml文件进行读取解析了
Document document = DocumentHelper.parseText(xml);
至此,就可以解决Java解析xml文件遇到特殊符号&出现异常的问题了。
来源:https://www.cnblogs.com/zhujiqian/p/14766674.html


猜你喜欢
- 一、常量用final修饰(也称最终变量)常量在声明时必须赋初值,赋值后不能再修改值常量名通常用全大写字母表示声明时需要添加final或sta
- 前言我们在日常开发中,经常会用到一个系统需要链接多个数据库来实现业务的需求,比如多个系统之间数据调用、两个数据之间同步等等。今天给大家分享使
- 前言平时在搬砖的时候,大家有没有遇到过这样的一个场景,由于各种不可描述因素导致,一个接口返回的数据 里面的 key 是 A , 但是客户端(
- 在了解HTTP断点续传的原理之前,让我们先来了解一下HTTP协议,HTTP协议是一种基于tcp的简单协议,分为请求和回复两种。请求协议是由客
- 以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.class文件,每个文件中的功能与作用,同样可以得到他们希
- 本文实例讲述了spring mvc 实现获取后端传递的值。分享给大家供大家参考,具体如下:jsp页面怎么获取从后端传递过来的值?JSTL 方
- spring cloud常用依赖和配置整理常用依赖// pom.xml<?xml version="1.0" en
- 首先是获取特定进程对象,可以使用Process.GetProcesses()方法来获取系统中运行的所有进程,或者使用Process.GetC
- 一、概念 java对象序列化的意思就是将对象的状态转化成字节流,以后
- 本文实例为大家分享了ListView分页加载数据的具体代码,供大家参考,具体内容如下FenyeActivitypackage com.exa
- Android 中在有序广播中添加自定义权限的实例前言;有序广播说明:有序广播因为要处理消息的处理结果,所以要复杂一些。 * sendOrd
- FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。ffmpeg命令参数如下:通用选项-L license
- android的WebView组件可以说是相当的强大,现将项目中经常用到的几个功能总结如下:一、背景设置WebView.setBackgro
- 详解C#编程获取资源文件中图片的方法本文主要介绍C#编程获取资源文件中图片的方法,涉及C#针对项目中资源文件操作的相关技巧,以供借鉴参考。具
- 指定创建派生类实例时应调用的基类构造函数;调用基类上已被其他方法重写的方法。注意:不能从静态方法中使用base关键字,base关键字只能在实
- for循环和foreach循环其实可以算得上是从属关系的,即foreach循环是可以转化成for循环,但是for循环不一定能转换成forea
- 注意:这篇博客已经和当前的分页插件完全不一样了,所以建议大家通过上面项目地址查看最新的源码和文档来了解。以前为Mybatis分页查询发愁过,
- 本文实例讲述了C#提取网页中超链接link和text部分的方法。分享给大家供大家参考,具体如下:string s = "..&qu
- * 可以说是Android开发中最常用的东西之一。我们通过 * 可以监听对象的各种变化事件,并进行一些需要的处理,相当有用,而且使用起来也
- QueryWrapper条件构造之apply、last、select场景: 查询数据库限制条数时mysql上的limit使用 Qu