2009-01-27 7 views
7

W3C DOM을 사용하여 Java에서 XML 파일을 구문 분석하고 있습니다. 특정 문제에 봉착했습니다. 노드의 전체 XML을 가져 오는 방법을 알 수 없습니다.Java/DOM : 노드의 XML 내용 얻기

노드는 다음과 같습니다

<td><b>this</b> is a <b>test</b></td>

어떤 기능을 내가 그 얻기 위해 사용해야합니까 : 당신은 귀하의 <B> 노드를 사용하여 변환/XSLT API를 사용할 필요가

"<b>this</b> is a <b>test</b>"

+0

[노드의 내부 XML을 얻을하는 데 도움이 될 수 SO에이 게시물이] [1] 을 [만들기 위해 관리 1] : http://stackoverflow.com/questions/7910474/how-to-get-node-contents-from-jdom – JeeZ

답변

0

어 ... toString()을 호출하고 수동으로 또는 regexps를 사용하여 시작 및 종료 태그를 잘라낼 수도 있습니다.

편집 : toString()이 예상 한대로 작동하지 않습니다. O'Reilly 풀어서 Java & XML book은 Java DOM의 Load and Save 모듈에 대해 이야기합니다.

매우 유망 해 보이는 LSSerializer을 참조하십시오. 내가 제안한 것처럼 writeToString (node)을 호출하고 시작과 끝 태그를 잘라낼 수도 있고, 최상위 노드 태그를 인쇄하지 않기 위해 LSSerializerFilter을 사용하려고 시도 할 수도 있습니다 (그 코드가 작동하는지 확신 할 수 없지만 전에 LSSerializer를 사용한 적이 없다는 것을 인정합니다.) .) 오라일리 책을 읽고

이 같은 일을 나타낼 것으로 보인다 :

DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance(); 
DOMImplementationLS lsImpl = 
    (DOMImplementationLS)registry.getDOMImplementation("LS"); 
LSSerializer serializer = lsImpl.createLSSerializer(); 
String nodeString = serializer.writeToString(node); 
+0

아니요? 내 td-Node의 .toString()은 "[b : null]"이됩니다. –

+0

흠, Javascript + e4x와 혼동 스러울 것 같아요. 출력을 생성하는 함수를 호출 한 다음 시작/끝 태그를 삭제하는 것을 의미합니다. –

0

node.getTextContent를();

다른 이유로 인해 공백을 올바르게 처리하려면 Dom4J의 JDom을 사용하여 노드를 처리해야합니다.

0

아마도 이러한 코드를 사용할 수 있습니다 unneccesary 태그를 제거하려면 다음

된 DOMConfiguration 설정 = serializer.getDomConfig(); config.setParameter ("canonical-form", true); "정규 형식은 = 사실은"선택 사항이기 때문에

그러나 그것은 항상 작동하지 않습니다

4

나는이 오래 전에 요청하지만 검색 다음 사람을 위해 (나에게 오늘이었다),이 JDOM 작동되었다 알고

JDOMXPath xpath = new JDOMXPath("/td"); 
String innerXml = (new XMLOutputter()).outputString(xpath.selectNodes(document)); 

모든 자식 노드의 목록을 outputString으로 전달하여 outputString에 순서대로 나열합니다.

1

이것에 대해 어떻게 말합니까? 나는 안드로이드에 오늘 같은 문제가 없었다,하지만 난 간단한 "serializator"

private String innerXml(Node node){ 
     String s = ""; 
     NodeList childs = node.getChildNodes(); 
     for(int i = 0;i<childs.getLength();i++){ 
      s+= serializeNode(childs.item(i)); 
     } 
     return s; 
    } 

    private String serializeNode(Node node){ 
     String s = ""; 
     if(node.getNodeName().equals("#text")) return node.getTextContent(); 
     s+= "<" + node.getNodeName()+" "; 
     NamedNodeMap attributes = node.getAttributes(); 
     if(attributes!= null){ 
      for(int i = 0;i<attributes.getLength();i++){ 
       s+=attributes.item(i).getNodeName()+"=\""+attributes.item(i).getNodeValue()+"\""; 
      } 
     } 
     NodeList childs = node.getChildNodes(); 
     if(childs == null || childs.getLength() == 0){ 
      s+= "/>"; 
      return s; 
     } 
     s+=">"; 
     for(int i = 0;i<childs.getLength();i++) 
      s+=serializeNode(childs.item(i)); 
     s+= "</"+node.getNodeName()+">"; 
     return s; 
    } 
관련 문제