본문 바로가기
카테고리 없음

[Java] org.w3c.dom.Node 클래스를 Document로 변환하기

by 꼬마낙타 2019. 5. 16.
반응형

XML의 특정 서브 트리의 Node 객체를 이용해서 해당 객체가 Root인 새로운 Document 를 만들고 싶을 때가 있다. 예를 들어 다음과 같은 XML Document가 있다고 하자.

<root>
    <node1>
          <subnode1>value 1</subnode1>
     </node1>
    <node2>
         <subnode2>value 2</subnode2>
    </node2>
    <node3>
         <subnode3>value 3</subnode3>
    </node3>
</root>

XPath 등을 이용해서 <node3> 에 해당하는 Node 객체를 얻어왔을 때 <node3>  노드의 서브 트리를 Root로 하는 새로운 Document를 얻어오고 싶을 경우가 있다. 

<node3>
     <subnode3>value 3</subnode3>
</node3>

org.w3c.dom.Document 인터페이스에는 importNode() 라는 메소드가 있으며, 이 메소드를 이용해서 새로운 Document를 만들 수 있다. org.w3c.dom.Node 클래스를 Root로 하는 새로운 org.w3c.dom.Document를 만드는 예제 코드는 다음과 같다.

public Document getNewDocumentFromNode(Node root) {
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

    // XML Namespace
     factory.setNamespaceAware(true);
     DocumentBuilder builder = factory.newDocumentBuilder();

    // New document
    Document document = builder.newDocument();

    // Copy Subtree nodes
     Node importedNode = document.importNode(root, true);

    // Append copied subtree to the new document
     document.appendChild(importedNode);

    return document;
}

이렇게 사용하면 XML을 파싱한 DOM 트리의 각 Element 들이 새로 복사되어 Document를 구성하게 된다.

반응형

댓글