2

次の 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#">

または、XHTML コードを含むすべての「説明」要素に、次のように追加しますか? この後の解決策を試しましたが、それでも同じエラーが発生します。

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

1 に答える 1

0

XML にエラーがある場合、なぜそれを無視したいのでしょうか? XML パーサーは、不適切な XML を拒否するように設計されています。

この XML にはエンティティ参照&acirc;が含まれているようですが、このエンティティを定義する DTD が含まれていません。これは標準の XHTML エンティティの 1 つであるため、XHTML から関連するエンティティ宣言 DTD モジュールへの参照を追加することで、おそらく XML を修復できます。

于 2012-07-18T13:58:50.303 に答える