如何将org.w3c.dom.Document转换为org.jdom.Document

如何将org.w3c.dom.Document转换为org.jdom.Document,dom,w3c,jdom,jtidy,Dom,W3c,Jdom,Jtidy,我需要将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(f

我需要将
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);
domguilder.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)
org.jdom.IllegalNameException:名称“html PUBLIC”-//W3C//DTD HTML4.01 Transitional//EN”对jdom/XML文档类型不合法:XML名称不能包含字符“”。
位于org.jdom.DocType.setElementName(DocType.java:171)
位于org.jdom.DocType.(DocType.java:111)
位于org.jdom.DocType(DocType.java:144)
位于org.jdom.DefaultJDOMFactory.docType(DefaultJDOMFactory.java:118)
位于org.jdom.input.domguilder.buildTree(domguilder.java:332)
位于org.jdom.input.domguilder.buildTree(domguilder.java:170)
位于org.jdom.input.domguilder.build(domguilder.java:135)
test.JaxenTest.testParsingVisitor(JaxenTest.java:58)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中

在我看来,JTidy似乎正在创建一个格式错误的DocType节点。我建议使用不同的HTML解析器


我推荐,但还有很多其他的。

在我看来,JTidy似乎正在创建一个格式错误的DocType节点。我建议使用不同的HTML解析器


我推荐,但还有很多其他设置。

添加这两个设置,一切都会正常工作

tidy.setXHTML(true);
tidy.setDocType("omit");
第一个设置告诉jTidy输出一个XHTML文件。XHTML文件是有效的XML


第二个选项卡告诉tidy不要将DOCTYPE行输出到代码中。由于某些原因,JDom似乎无法识别合法的html/xhtml文档类型。

添加这两个设置,一切都会正常工作

tidy.setXHTML(true);
tidy.setDocType("omit");
第一个设置告诉jTidy输出一个XHTML文件。XHTML文件是有效的XML


第二个选项卡告诉tidy不要将DOCTYPE行输出到代码中。出于某种原因,JDom似乎无法识别合法的html/xhtml文档类型。

公平地说,这不是JDom的问题。我想您会发现DOM文档“馈送”JDOM是不准确的。。。您不能有一个名为“html PUBLIC”-//W3C//DTD HTML4.01 Transitional//EN”的元素。公平地说,这不是JDOM问题。我想您会发现DOM文档“馈送”JDOM是不准确的。。。不能有名为“html公共”-//W3C//DTD HTML4.01//EN”的元素