⽂/朱季谦
在⼀次Java解析xml⽂件的开发过程中,使⽤SAX解析时,出现了这样⼀个异常信息:
Error on line 60 of document : 对实体 "xxx" 的引⽤必须以 ';' 分隔符结尾;
我打开xml⽂件后,发现该“xxx"符号之前跟着⼀个”&“符号,后来了解到,这类符号在xml⾥属于⼀种特殊符号,⽽特殊符号若没⽤转义符表⽰,直接⽤到xml⽂件⾥,就会在使⽤SAX等⽅式做解析时出现奇怪的异常。
其实,这都是因为这些特殊字符造成的。
XML当中特殊符号包括< > & ' "等,它们是不允许作为xml⽂件的PCDATA,若想使⽤话,需⽤转义符代替:
< <
> >
& &
" "
' '
xml文件怎么打开那么,若要正常读取xml⽂件数据,应该如何使⽤转义符替换呢?
刚开始是想百度⼀番如何解决,却发现好多帖⼦都是好⼏年前的,且都没有写清楚怎么个解决⽅法,⼤多都是提到是特殊符号引起的解析异常,但怎么过滤掉,显得含糊其辞,因此,只能⾃⼰胡乱捣⿎⼀番,捣⿎出⼀个⽐较合适的将特殊字符过滤的⽅案。
实现思路其实很简单,我们可以在读取xml⽂件使⽤SAX解析前,先把xml⽂件通过Reader读取,然后按⾏读取出来拼接成⼀个String字符串,再使⽤字符串的替换⽅法replaceAll()将特殊符号进⾏替换,替换后,就可以将字符串形式的xml直接转成Document对象做xml解析了:
String placeAll("&","&");
转换⽅法代码如下:
StringBuffer buffer = new StringBuffer();
BufferedReader bf= new BufferedReader(new FileReader("D:\\测试.xml"));
String s = null;
while((s = bf.readLine())!=null){
buffer.im());
}
String str = String();
//在这⼀步进⾏字符替换,替换成合法转义字符
String placeAll("&","&");
//这⾥就可以将处理过的xml⽂件进⾏读取解析了
Document document = DocumentHelper.parseText(xml);
⾄此,就可以解决Java解析xml⽂件遇到特殊符号&出现异常的问题了。
发布评论