我需要解析非格式良好的xml数据(HTML)

时间:2010-04-01 13:49:03

标签: java xml parsing jaxp

我在JAVA中有一些格式不正确的xml(HTML)数据,我使用了JAXP Dom,但它抱怨。

  

问题是:有什么办法吗?   使用JAXP来解析这样的文件??

我有一个包含以下数据的文件:

<employee>
 <name value="ahmed" > <!-- note, this element is not closed, So it is not well-formed xml-->
</employee>

3 个答案:

答案 0 :(得分:8)

您可以先尝试通过jtidy API运行文档 - 它可以将html转换为有效的xhtml:http://jtidy.sourceforge.net/howto.html

Tidy tidy = new Tidy();
tidy.setXHTML(true);
tidy.parse(......)...

答案 1 :(得分: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));
}

答案 2 :(得分:1)

不是真的。 JAXP需要格式良好的标记。你考虑过Cyberneko HTML Parser了吗?我们在我们的商店非常成功。

编辑:我发现你也想要解析XML。 Hrmm .... Cyber​​neko适用于HTML,但我不了解其他人。它有一个标签平衡器可以关闭一些标签,但我不知道你是否可以训练它来识别不是HTML的标签。