Java에서 XPath를 사용하기

Written by kwSeo

#XPath on Java XPath는 이미 비교적 오래전에 W3C표준으로 정의되었으며, Java 역시 이 XPath 표준을 구현하고 있습니다. 이번 포스트에서는 Java에서 XPath를 사용하는 법에 대해서 다루고자 합니다.

##XPath 패키지

#XPath와 DOM XPath는 마치 DOM의 확장처럼 보입니다. 기존의 불편했던 XML 요소나 속성의 접근 방법을 보다 편리하고 쉽게 만들어 줍니다. 마치 Javascript의 JQuery 라이브러리처럼요. JQuery에서 셀렉터를 통해 손쉽게 요소에 접근할 수 있듯이 XPath에서는 디렉토리경로와 비슷한 표현식을 통해 XML 노드에 접근할 수 있습니다.(XPath 표현식)


#XPath 클래스 ##XPath 객체 생성 XPath 객체 생성은 정말 간단합니다.

XPath xPath = XPathFactory.newInstance().newXPath();

끝. 네, 저게 다입니다. 아무런 파라미터도 필요하지 않습니다. 저게 다입니다.

##XPath 사용하기 XPath를 사용하기 위해서는 XML노드가 필요합니다. 선택된 노드를 바탕으로 XPath의 표현식을 사용합니다. XPath 클래스의 evaluate()메서드를 통해서 원하는 노드 및 값을 얻을 수 있습니다.

xPath.evaluate(expr, item, returnType);

evaluate()메서드의 expr 파라미터는 XPath 표현식을 의미하고, item은 대상 노드를, returnType은 말그대로 반환값의 타입을 의미합니다. returnType의 종류는 아래와 같습니다.

아래의 예제는 Node 인터페이스를 상속받은 Document 인터페이스를 이용한 예제입니다.

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("sample.xml");
Node node = (Node)xPath.evaluate("//element1", doc, XPathConstants.NODE);
NodeList nodeList = (NodeList)xPath.evaluate("//element2", doc, XPathConstants.NODESET);
String value = (String)xPath.evaluate("//element1/@attr", doc, XPathConstants.STRING);

이때 핵심은 evaluate()메서드의 두번째 인자는 Node라는 것이 입니다. 즉, 꼭 Document 객체만 전달하는 것이 아닌 Node인터페이스와 이를 상속받고, 구현하고 있는 모든 객체들을 전달할 수 있다는 것입니다. 그래서 아래의 코드처럼 XPath를 통해 얻은 결과 Node를 다시 XPath의 두번째 인자로 전달할 수 있습니다. 이때에는 인자로 전달한 Node가 루트요소로 취급됩니다.

Node node = (Node)xPath.evaluate("//node1", doc, XPathCostants.NODE);
String value = (String)xPath.evaluate("subNode1/@id", node, XPathConstants.STRING);

#XPath 알아보기

Done At: Jul 28,2015
Categories: