我在JAVA中有一些格式不正确的xml(HTML)数据,我使用了JAXP Dom,但它抱怨。
问题是:有什么办法吗? 使用JAXP来解析这样的文件??
我有一个包含以下数据的文件:
<employee>
<name value="ahmed" > <!-- note, this element is not closed, So it is not well-formed xml-->
</employee>
答案 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 .... Cyberneko适用于HTML,但我不了解其他人。它有一个标签平衡器可以关闭一些标签,但我不知道你是否可以训练它来识别不是HTML的标签。