我在JAVA中有一些非格式良好的XML(HTML)數據,我使用JAXP Dom,但它抱怨。我需要解析非格式良好的XML數據(HTML)
問題是:有什麼辦法可以用 來解析這些文件?
我有一個包含諸如數據的文件:
<employee>
<name value="ahmed" > <!-- note, this element is not closed, So it is not well-formed xml-->
</employee>
我在JAVA中有一些非格式良好的XML(HTML)數據,我使用JAXP Dom,但它抱怨。我需要解析非格式良好的XML數據(HTML)
問題是:有什麼辦法可以用 來解析這些文件?
我有一個包含諸如數據的文件:
<employee>
<name value="ahmed" > <!-- note, this element is not closed, So it is not well-formed xml-->
</employee>
不是真的。 JAXP需要格式良好的標記。你有沒有考慮過Cyberneko HTML Parser?我們在我們的商店一直非常成功。
編輯:我看到你也想解析XML。 Hrmm .... Cyberneko適用於HTML,但我不瞭解其他人。它有一個標籤平衡器,可以關閉一些標籤,但我不知道你是否可以訓練它識別不是HTML的標籤。
你可以嘗試通過jtidy API首先運行您的文檔 - 即具有HTML轉換成有效的XHTML的能力:http://jtidy.sourceforge.net/howto.html
Tidy tidy = new Tidy();
tidy.setXHTML(true);
tidy.parse(......)...
你可以使用TagSoup。我用它取得了巨大的成功。它與Java XML API完全兼容,包括SAX,DOM,XSLT和StAX。例如,以下是我如何將XSLT轉換應用於特別差的HTML:
public static void transform(InputStream style, InputStream data)
throws SAXException, TransformerException {
XMLReader reader =
XMLReaderFactory.createXMLReader("org.ccil.cowan.tagsoup.Parser");
Source input = new SAXSource(reader, new InputSource(data));
Source xsl = new StreamSource(style);
Transformer transformer =
TransformerFactory.newInstance().newTransformer(xsl);
transformer.transform(input, new StreamResult(System.out));
}
它允許修改文檔嗎? – 2010-04-01 13:52:57
它是一個解析器,因此您將不得不使用DOM HTML解析器解析文檔,然後在生成的DOM樹中修改文檔。您可以啓用一些設置來幫助您獲得良好的結果樹,並在http://nekohtml.sourceforge.net/settings.html上記錄這些設置。 – 2010-04-01 13:56:29