用Xerces忽略奇怪的解析错误

时间:2012-07-18 13:06:07

标签: java xml xml-parsing xerces

我试图将以下url解析为Java中的DOM文档:http://www.op.org/en/rss-category-home/8

然而,当我这样做时,我收到以下错误:

13:51:38,470 ERROR ~ Error processing site Site 1
org.xml.sax.SAXParseException: The entity "acirc" was referenced, but not declared.
    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:124)
    at logic.server.RssReader.readRss(RssReader.java:44)
    at logic.server.GatherData.doJobWithResult(GatherData.java:49)
    at logic.server.GatherData.doJobWithResult(GatherData.java:1)

我在某处读到当前JRE中的Xerces解析器有一个与此相关的错误,因此下载了Xerces2 2.11.0,但仍然存在同样的问题。

如何解决这个问题。我无法控制RSS提要本身,但需要解析XML来处理文章。

我的代码是:         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

    DocumentBuilder builder = dbf.newDocumentBuilder();
    Document dom = builder.parse(rssUrl.openStream());
    NodeList nodes = dom.getElementsByTagName("item");
    etc. etc.

非常感谢任何解决这个问题的帮助!

修改 如果我尝试下面的解决方案并添加DTD,我会在哪里这样做?当前的RSS元素是:

<rss version="2.0" xml:base="http://www.op.org/en/rss-category-home/8" xmlns:dc="http://purl.org/dc/elements/1.1/" content="http://purl.org/rss/1.0/modules/content/" dc="http://purl.org/dc/terms/" foaf="http://xmlns.com/foaf/0.1/" og="http://ogp.me/ns#" rdfs="http://www.w3.org/2000/01/rdf-schema#" sioc="http://rdfs.org/sioc/ns#" sioct="http://rdfs.org/sioc/types#" skos="http://www.w3.org/2004/02/skos/core#" xsd="http://www.w3.org/2001/XMLSchema#">

或者我会将它添加到每个'description'元素,其中包含XHTML代码,类似这样的东西?我尝试了以后的解决方案,但它仍然会出现同样的错误。

<description xmlns="http://www.w3.org/1999/xhtml">

1 个答案:

答案 0 :(得分:0)

如果XML中存在错误,您为什么要忽略它? XML解析器旨在拒绝错误的XML。

看起来这个XML包含实体引用&acirc;,但不包括定义此实体的DTD。这是标准的XHTML实体之一,因此您可以通过添加对XHTML中相关实体声明DTD模块的引用来修复XML。