2012-07-05 1 views
0

org.w3c.dom.Document 객체의 내용을 문자열로 변환하려고합니다. JBrowser 구성 요소에 표시된 현재 페이지의 Document 객체를 가져옵니다. 문서 DOM 트리를 문자열로 변환하는 가장 일반적인 방법은 javax.xml.transform.Transformer를 사용하는 것입니다. 그래서이 구현 :HTML DOM 트리에서 문자열 - Transformer NullPointerException

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

TransformerFactory.newInstance().newTransformer().transform(
      new DOMSource(aDocument), new StreamResult(baos)); 

return baos.toString(); 

이 간단한 웹 사이트에 대한 작동하지만 더 복잡한 그들이 나를 더 높은 확률이 점점이 예외 얻을 : 일부 연구는 힌트에 대해 알게되면

ERROR: '' 
05.07.2012 10:17:09 com.de.test.Demonstrator$1 run 
FATAL: null 
javax.xml.transform.TransformerException: java.lang.NullPointerException 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:717) 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313) 
at com.de.test.DocumentUtils.toHTML(DocumentUtils.java:47) 
at com.de.test.Demonstrator$1.run(Demonstrator.java:172) 
Caused by: java.lang.NullPointerException 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:178) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:132) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:94) 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:662) 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:708) 
... 3 more 
--------- 
java.lang.NullPointerException 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:178) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:132) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:94) 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:662) 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:708) 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313) 
at com.de.test.DocumentUtils.toHTML(DocumentUtils.java:47) 
at com.de.test.Demonstrator$1.run(Demonstrator.java:172) 

을, 일부 텍스트 요소가 null 일 수 있으며 이로 인해 Transformer가 충돌하게됩니다. 그래서 난 그냥했다 :

public static final void traverseLevel(TreeWalker walker, Document aDocument, String indent) 
{ 
    // describe current node: 
    Node parent = walker.getCurrentNode(); 

    if (parent != null && parent.getNodeValue() == null) 
     parent.setNodeValue(" "); 

    System.out.println(indent + "- <" + ((Element) parent).getTagName() + ">" + parent.getNodeValue()); 

    // traverse children: 
    for (Node n = walker.firstChild(); n != null; n = walker.nextSibling()) 
    { 
     if(n != null) 
      traverseLevel(walker, aDocument, indent + '\t'); 
    } 

    System.out.println("</"+ ((Element) parent).getTagName() + ">"); 

    // return position to the current (level up): 
    walker.setCurrentNode(parent); 
} 

나는 "parent.getNodeValue()는"항상 null을 반환 것을 알아 냈다 곳입니다. 재미있는 점은 간단한 웹 사이트에서도 문제가 발생하지만 변압기는 여전히 트리의 값을 출력한다는 것입니다. null 문자 노드 교체로 인해 잘못된 점은 무엇입니까? 이 문제를 일으킬 수있는 다른 잠재적 인 문제가 있습니까?

감사합니다.

답변

0

그래, 내 문제에 대한 해결 방법을 찾았습니다. 저는 JBrowser를 convertToHtml() 함수가있는 DJ Project 브라우저로 변경했습니다. 나는 내가이 길을 택한 이유 인 변압기 문제를 해결할 수 없었다.