2

をに変換する必要がありorg.w3c.dom.Documentます org.jdom.Document

私は次の次のことを試しました..

InputStream inputStream =  new ByteArrayInputStream(str.getBytes());

Tidy tidy = new Tidy();
tidy.setMakeClean(false);
tidy.setShowWarnings(true); //tidy.setShowWarnings(false);
tidy.setTidyMark(false);
tidy.setNumEntities(true);
tidy.setQuoteAmpersand(true);
tidy.setQuoteMarks(true);
tidy.setQuoteNbsp(false);
tidy.setHideEndTags(false);
tidy.setDropEmptyParas(false);

Document tidyDOM =tidy.parseDOM(inputStream, null);
DOMBuilder domBuilder = new DOMBuilder();
org.jdom.Document jdomDoc = domBuilder.build(tidyDOM);

domBuilder.build(tidyDOM)次の例外をスローします。

org.jdom.IllegalNameException: The name "html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"" is not legal for JDOM/XML DocTypes: XML names cannot contain the character " ".
    at org.jdom.DocType.setElementName(DocType.java:171)
    at org.jdom.DocType.<init>(DocType.java:111)
    at org.jdom.DocType.<init>(DocType.java:144)
    at org.jdom.DefaultJDOMFactory.docType(DefaultJDOMFactory.java:118)
    at org.jdom.input.DOMBuilder.buildTree(DOMBuilder.java:332)
    at org.jdom.input.DOMBuilder.buildTree(DOMBuilder.java:170)
    at org.jdom.input.DOMBuilder.build(DOMBuilder.java:135)
    at test.JaxenTest.testParsingVisitor(JaxenTest.java:58)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
4

2 に答える 2

0

JTidy が不正な形式の DocType ノードを作成しているように見えます。別の HTML パーサーを使用することをお勧めします。

Validator.nu HTML パーサーをお勧めしますが、他にもたくさんあります。

于 2012-02-18T01:33:04.600 に答える
0

これら 2 つの設定を追加すると、すべてが機能するはずです。

tidy.setXHTML(true);
tidy.setDocType("omit");

最初の設定は、jTidy に XHTML ファイルを出力するように指示します。XHTML ファイルは有効な XML です。

2 番目のタブは、コードに DOCTYPE 行を出力しないように tidy に指示します。何らかの理由で、JDom は正当な html/xhtml doctype を認識しないようです。

于 2012-05-01T20:30:15.213 に答える