2012-02-17 1 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

이 두 설정을 추가하면 모든 것이 작동합니다.

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

첫번째 설정은 jTidy에게 XHTML 파일을 출력하도록 지시합니다. XHTML 파일은 유효한 XML입니다.

두 번째 탭은 tidy에게 코드에 DOCTYPE 줄을 출력하지 않도록 지시합니다. 어떤 이유로 JDom은 합법적 인 html/xhtml 문서 형식을 인식하지 못하는 것 같습니다.

+1

공평하게 말하면 이것은 JDOM 문제가 아닙니다. DOM Document 'feeding'JDOM이 정확하지 않다는 것을 알게 될 것입니다. "html PUBLIC"- // W3C // DTD HTML 4.01 Transitional // EN "" – rolfl