JAVAに整形式ではないxml(HTML)データがいくつかあり、JAXP Domを使用しましたが、文句を言います。
質問は:JAXPを使用してそのようなドキュメントを解析する方法はありますか?
次のようなデータを含むファイルがあります:
<employee>
<name value="ahmed" > <!-- note, this element is not closed, So it is not well-formed xml-->
</employee>
最初にjtidyAPIを使用してドキュメントを実行してみてください。これにはhtmlを有効なxhtmlに変換する機能があります:http://jtidy.sourceforge.net/howto.html
Tidy tidy = new Tidy();
tidy.setXHTML(true);
tidy.parse(......)...
TagSoupを使用できます。私はそれを大成功で使用しました。SAX、DOM、XSLT、StAXなどのJavaXMLAPIと完全に互換性があります。たとえば、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));
}
あまり。JAXPは整形式のマークアップを望んでいます。Cyberneko HTMLパーサーを検討しましたか?当店では大成功を収めています。
編集:あなたもXMLを解析したいと思っているようです。うーん....CybernekoはHTMLでうまく機能しますが、他の人については知りません。一部のタグを閉じるタグバランサーがありますが、HTML以外のタグを認識するようにトレーニングできるかどうかはわかりません。