2010-04-01 89 views
5

我在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> 

回答

1

不是真的。 JAXP需要格式良好的標記。你有沒有考慮過Cyberneko HTML Parser?我們在我們的商店一直非常成功。

編輯:我看到你也想解析XML。 Hrmm .... Cyber​​neko適用於HTML,但我不瞭解其他人。它有一個標籤平衡器,可以關閉一些標籤,但我不知道你是否可以訓練它識別不是HTML的標籤。

+0

它允許修改文檔嗎? – 2010-04-01 13:52:57

+0

它是一個解析器,因此您將不得不使用DOM HTML解析器解析文檔,然後在生成的DOM樹中修改文檔。您可以啓用一些設置來幫助您獲得良好的結果樹,並在http://nekohtml.sourceforge.net/settings.html上記錄這些設置。 – 2010-04-01 13:56:29

8

你可以使用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)); 
}