org.xml.sax.SAXParseException:字符引用必须以';'结尾分隔符。需要解决方法

时间:2009-06-25 10:16:03

标签: java xml parsing

我正在尝试使用Java中的DOM Parser来解析一个小的XML文件,我从它的uri中取出网络,但收到错误抱怨丢失分号的错误。

这是链接108:

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("url_to_the_xml_file.xml");

这是错误:

[Fatal Error] A01.xml:6:53: The character reference must end with the ';' delimiter.
Exception in thread "main" org.xml.sax.SAXParseException: The character reference must end with the ';' delimiter.
  at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
  at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
  at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:180)
  at Parser.Parse(Parser.java:108)
  at Parser.main(Parser.java:185)

解析这一行XML

<title>Reduction Algorithm using the &#192 TROUS Wavelet Transform.</title>

显然有一个分号缺失。对于这个问题,有谁知道任何干净整洁的工作?

3 个答案:

答案 0 :(得分:1)

我会将XML单独检索为字节数组/字符串,并在将其发送到解析器之前对格式错误的实体执行正则表达式替换。

我不是正则表达式专家,但是搜索&amp;#\ d {1,4} [^;]可能会做一半的技巧。

如果您只有这个实体格式错误,那么您可以String.replaceAll("&#192", "&#192;");

答案 1 :(得分:1)

使用

"?default=sample&amp;page=homePage"

答案 2 :(得分:0)

如果您的XML语法存在更多问题,则更全面的解决方案是使用HTMLTidy或其Java端口JTidy在将标记提供给解析器之前清除标记。它最初是为HTML / XHTML设计的,但我很确定如果给出正确的设置,它能够整理任意XML。