출처 - xpath 를 이용, java 에서 xml 문서 쉽게 파싱하기
xpath 를 이용할수 있다는 걸 알기전에는 무식하게도 Document 클래스의 getElementById() 나 getElementsByTagName() 메소드를 이용해서
상당히 무식하게 난해한 코드로 xml 을 파싱하곤 했었다 -_-
어느날 문득 xpath 에 대해서 살짝 알게되고 나서 부터는 전에 쓰던 방법에 비해서는 아주 간결하고 이해하기 쉬운 코드로 xml 에서 원하는 데이터를 땡겨다 쓰는게 훨씬 수월해 졌다.
※ xpath 문법에 대해서 왠만한걸 쉽게 파악하기 위해서는 요 사이트에 가면 된다.
http://www.zvon.org/xxl/XPathTutorial/General/examples.html
요기 가서 보면 알겠지만 쉽게 쉽게 설명되있다.
xpath 만 어느정도 쓸 수 있으면 xml 에서 원하는 데이터를 땡겨오는건 매우 쉬워지니 살짝 한번 연구해 보는걸 추천한다.
xpath를 이용해서 xml 에서 원하는 데이터를 파싱하는 예제코드를 작성해 보았다.
xpath 를 사용하기 위해서 별다로 다른 라이브러리를 classpath 에 추가 안해도 된다.
예제 코드에서 사용된 xml
1 2 3 4 5 6 7 8 9 10 | < root > < row > < col1 id = "c1" >값1</ col1 > < col2 id = "c2" val = "val2" >값2</ col2 > </ row > < row > < col1 id = "c3" >값3</ col1 > < col2 id = "c4" >값4</ col2 > </ row > </ root > |
예제 코드는 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import java.io.StringReader; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; public class XPathTest{ public static void main(String[] args) throws Exception { String xml = "<root><row><col1 id='c1'>값1</col1><col2 id='c2' val='val2'>값2</col2></row>" + "<row><col1 id='c3'>값3</col1><col2 id='c4'>값4</col2></row></root>" ; // XML Document 객체 생성 InputSource is = new InputSource( new StringReader(xml)); Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is); // 인터넷 상의 XML 문서는 요렇게 생성하면 편리함. //Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder() // .parse("http://www.example.com/test.xml"); // xpath 생성 XPath xpath = XPathFactory.newInstance().newXPath(); // NodeList 가져오기 : row 아래에 있는 모든 col1 을 선택 NodeList cols = (NodeList)xpath.evaluate( "//row/col1" , document, XPathConstants.NODESET); for ( int idx= 0 ; idx<cols.getLength(); idx++ ){ System.out.println(cols.item(idx).getTextContent()); } // 값1 값3 이 출력됨 // id 가 c2 인 Node의 val attribute 값 가져오기 Node col2 = (Node)xpath.evaluate( "//*[@id='c2']" , document, XPathConstants.NODE); System.out.println(col2.getAttributes().getNamedItem( "val" ).getTextContent()); // val2 출력 // id 가 c3 인 Node 의 value 값 가져오기 System.out.println(xpath.evaluate( "//*[@id='c3']" , document, XPathConstants.STRING)); // 값3 출력 } } |
전에 getElementById(), getElementsByTagName() 요걸 쓰던 코드에 비하면 코드도 쉽게 읽히고 심플하기도 서울역에 그지없다.
앞으로 xml 파싱할때는 xpath 를 주로 써야겠다.
※ evalueate() 메소드 맨 끝에 들어가는 파라메터로
XPathConstants.NODESET
XPathConstants.NODE
XPathConstants.BOOLEAN
XPathConstants.NUMBER
XPathConstants.STRING
요런걸 쓸 수 있다. 변수 이름을 보면 대충 어떨때 써야 할지 알 수 있을것이라 생각한다.
요런걸 쓸 수 있다. 변수 이름을 보면 대충 어떨때 써야 할지 알 수 있을것이라 생각한다.
'JAVA' 카테고리의 다른 글
[출처] System.getProperty(시스템 환경변수)|작성자 joypheonix (0) | 2013.06.26 |
---|---|
for문 ":" 정리 (0) | 2013.06.25 |
Log4j 로그 두번찍히는 문제 (0) | 2013.06.05 |
로그 성능 관련 isDebugEnabled (0) | 2013.06.04 |
자바 formatter (0) | 2013.05.21 |