Java解析xml文件遇到特殊符号异常的情况(处理方案)
作者:朱季谦 时间:2023-10-23 17:31:48
在一次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
标签:Java,xml文件,特殊符号
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
线程池ThreadPoolExecutor使用简介与方法实例
2021-11-02 21:02:24
c#删除代码中的单行注释行示例
2023-05-11 22:44:49
Eclipse开发环境导入android sdk的sample中的源码
2021-06-08 05:28:38
![](https://img.aspxhome.com/file/2023/5/138635_0s.png)
Spring boot+beetl+i18n国际化处理的方法
2023-07-22 00:36:31
![](https://img.aspxhome.com/file/2023/5/66685_0s.png)
Android基于google Zxing实现各类二维码扫描效果
2022-04-10 17:28:59
![](https://img.aspxhome.com/file/2023/7/116037_0s.jpg)
c#读写ini配置文件示例
2023-09-29 16:31:36
Java CharacterEncodingFilter案例详解
2022-03-21 18:22:32
![](https://img.aspxhome.com/file/2023/0/62960_0s.png)
Android Activity与Service通信(不同进程之间)详解
2023-07-16 00:55:34
Android中处理apple-touch-icon详解
2023-05-09 13:21:31
Android开发input问题解决分析
2021-11-10 08:58:46
java加密算法分享(rsa解密、对称加密、md5加密)
2021-08-30 16:22:08
JAVA NIO实现简单聊天室功能
2023-05-01 10:32:49
Android中让按钮拥有返回键功能的方法及重写返回键功能
2021-08-08 10:33:56
c#模拟银行atm机示例分享
2023-04-01 10:59:45
android仿支付宝密码输入框效果
2021-08-06 12:14:01
![](https://img.aspxhome.com/file/2023/9/117069_0s.gif)
基于<aop:aspect>与<aop:advisor>的区别
2023-01-22 21:53:35
java的NIO管道用法代码分享
2022-05-01 23:52:53
![](https://img.aspxhome.com/file/2023/7/105917_0s.jpg)
springboot maven 项目打包jar 最后名称自定义的教程
2021-08-12 00:01:11
![](https://img.aspxhome.com/file/2023/2/69092_0s.jpg)
Android View背景选择器编写技巧
2023-09-16 21:37:43
![](https://img.aspxhome.com/file/2023/8/139078_0s.png)
Android框架组件Lifecycle的使用详解
2022-08-01 08:48:59
![](https://img.aspxhome.com/file/2023/9/91039_0s.png)