xml 파싱에 관한 질문입니다.


<a>
    <b>123213</b>
    <c>
        <c1>a</c1>
        <c2>b</c2>
    </c>
    <d>123123</d>
</a>

현재 자바의 xpath를 이용해서 xml파일의 노드들을 파싱할려 하는데요 (javax.xml.xpath.XPath)

a노드 하위의 b,c,d들을 순회할 수 있도록 node나 nodelist 가져올 수 없는건가요?

  • 2016년 09월 19일에 작성됨

조회수 106


1 답변


좋아요
1
싫어요
채택취소하기
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList nl = (NodeList)xpath.evaluate("//a/*", document, XPathConstant.NODESET);
for(int i=0;i<nl.getLength();i++) {
  Element e = (Element)nl.getItem(i);
}

위와 같은 방식으로 하면 될 것 같습니다.

  1. xpath.evaluate에서 첫번째는 XPATH 식을 써주고,
  2. document는 XML DOM 문서를
  3. 마지막 인자에 return type을 명시해주면 되는데, xpath식에 의해 얻는 것이 node집합임으로 XPathConstant.NODESET으로 지정해주면 됩니다.

그리고 XPathConstant.NODESET일 경우 return type은 NodeList으로 형변환해서 사용하면됩니다.

위의 //a/* Xpath 식은 모든 a의 하위 노드라는 의미이빈다.

  • 2016년 09월 20일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

  • 감사합니다! 시도해보겠습니다.    PuppyRush   2016.9.20 13:23     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close