Java解析xml文件遇到特殊符号&会出现异常的解决方案

简介: XML当中特殊符号包括< > & ' "等,它们是不允许作为xml文件的PCDATA,若想使用话,需用转义符代替

文/朱季谦

在一次Java解析xml文件的开发过程中,使用SAX解析时,出现了这样一个异常信息:

Error on line 60 of document : 对实体 "xxx" 的引用必须以 ';' 分隔符结尾;

我打开xml文件后,发现该“xxx"符号之前跟着一个”&“符号,后来了解到,这类符号在xml里属于一种特殊符号,而特殊符号若没用转义符表示,直接用到xml文件里,就会在使用SAX等方式做解析时出现奇怪的异常。

其实,这都是因为这些特殊字符造成的。

XML当中特殊符号包括< > & ' "等,它们是不允许作为xml文件的PCDATA,若想使用话,需用转义符代替:

&lt;    <
&gt;    >
&amp;   &
&quot;  "
&apos;  '

那么,若要正常读取xml文件数据,应该如何使用转义符替换呢?

刚开始是想百度一番如何解决,却发现好多帖子都是好几年前的,且都没有写清楚怎么个解决方法,大多都是提到是特殊符号引起的解析异常,但怎么过滤掉,显得含糊其辞,因此,只能自己胡乱捣鼓一番,捣鼓出一个比较合适的将特殊字符过滤的方案。

实现思路其实很简单,我们可以在读取xml文件使用SAX解析前,先把xml文件通过Reader读取,然后按行读取出来拼接成一个String字符串,再使用字符串的替换方法replaceAll()将特殊符号进行替换,替换后,就可以将字符串形式的xml直接转成Document对象做xml解析了:

String xmlStr=s.replaceAll("&","&amp;");

转换方法代码如下:

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("&","&amp;");
  //这里就可以将处理过的xml文件进行读取解析了
  Document document =  DocumentHelper.parseText(xml);

至此,就可以解决Java解析xml文件遇到特殊符号&出现异常的问题了。

目录
相关文章
|
1天前
|
并行计算 Java API
Java中的Lambda表达式应用与实例解析
【2月更文挑战第4天】本文将深入探讨Java编程语言中Lambda表达式的应用与实例解析,通过详细介绍Lambda表达式的概念、语法特点以及在实际项目开发中的运用,帮助读者更好地理解和运用这一强大的编程特性。
|
2天前
|
设计模式 存储 前端开发
Java Web开发中MVC设计模式的实现与解析
Java Web开发中MVC设计模式的实现与解析
|
2天前
|
Java 应用服务中间件 API
深入解析Java Servlet技术在Web开发中的应用
深入解析Java Servlet技术在Web开发中的应用
|
2天前
|
存储 Java
Java TreeMap:基于红黑树的排序映射解析
Java TreeMap:基于红黑树的排序映射解析
|
2天前
|
存储 缓存 Java
Java LinkedHashMap:保持插入顺序的哈希表解析
Java LinkedHashMap:保持插入顺序的哈希表解析
|
2天前
|
安全 Java
Java TreeSet:基于红黑树的排序集合解析
Java TreeSet:基于红黑树的排序集合解析
|
2天前
|
存储 安全 Java
深入解析Java List接口及其实现类
深入解析Java List接口及其实现类
|
3天前
|
C语言
内核源码中遇到不会解析的宏怎么办?
内核源码中遇到不会解析的宏怎么办?
10 1
|
1月前
ChatGLM2 源码解析:`GLMTransformer`
ChatGLM2 源码解析:`GLMTransformer`
15 0
|
1月前
ChatGLM2 源码解析:`ChatGLMForConditionalGeneration.forward`
ChatGLM2 源码解析:`ChatGLMForConditionalGeneration.forward`
15 0

推荐镜像

更多