2012-02-17 8 views
2

へのorg.w3c.dom.Documentを変換する方法を私は、次の次のことを試してみましたorg.w3c.dom.Documentはorg.jdom.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) 

答えて

0

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

私はThe Validator.nu HTML Parserをお勧めしますが、他にもたくさんあります。

0

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

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

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

第2のタブは、コードにDOCTYPE行を出力しないように指示します。何らかの理由でJDomは合法的なhtml/xhtmlのdoctypeを認識していないようです。

+1

公平では、これはJDOMの問題ではありません。私はあなたがDOM Document 'feeding' JDOMが不正確であることに気付くでしょう。 "html PUBLIC" - // W3C // DTD HTML 4.01 Transitional // EN ""という要素を持つことはできません – rolfl