XPath를 활용한 XML 파싱
syntaxhighliter 에서 코드가 뭉개져서 그냥 붙여넣기 했더니 보기가 영 그렇다.
gist 에 올린 소스가 더 이쁘게 보여지므로 참고
[gist 링크] https://gist.github.com/haebi/29070dda0556fc6fba5909b45a067faa
소스코드
package xmlparse2; 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.NodeList; public class XmlParse2 { public static void main(String[] args) throws Exception {
// 샘플 XML 파일(books.xml) // [REF] https://msdn.microsoft.com/ko-kr/library/ms762271(v=vs.85).aspx Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("http://haebi.net/book.xml");
// XPath 인스턴스 생성 XPath xpath = XPathFactory.newInstance().newXPath();
// 대상 노드 지정 String expression = "/catalog/book";
// 지정 노드로 부터 노드목록 획득 NodeList nl = (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET);
// 첫번째 노드의 부모 노드명을 출력 System.out.println(nl.item(0).getParentNode().getNodeName());
System.out.println("sub node start!!"); System.out.println("-----------------------------------------------------");
// 1번째 book 노드의 자식노드 목록을 획득 NodeList cnl = nl.item(0).getChildNodes(); // author, title, genre, price, publish_date, description System.out.println(cnl.item(0).getParentNode().getNodeName()); // 확보된 노드 목록을 순서대로 출력 for(int i=0; i<cnl.getLength(); i++) { // 노드 이름이 #text로 출력되는 문제로 스킵 하도록 설정하였다. // xml파일의 들여쓰기로 인한 문제 인듯 하다. if("#text".equals(cnl.item(i).getNodeName())) continue;
// 현재 노드 인덱스 번호 출력 System.out.println(i);
// 노드 명 출력 System.out.println("NODE : " + cnl.item(i).getNodeName());
// 노드 값 출력 System.out.println("VALUE : " + cnl.item(i).getTextContent()); } System.out.println("-----------------------------------------------------"); } } |
출력
Start!! catalog sub node start!! ----------------------------------------------------- book 1 NODE : author VALUE : Gambardella, Matthew 3 NODE : title VALUE : XML Developer's Guide 5 NODE : genre VALUE : Computer 7 NODE : price VALUE : 44.95 9 NODE : publish_date VALUE : 2000-10-01 11 NODE : description VALUE : An in-depth look at creating applications with XML. ----------------------------------------------------- |