Shinnara's Blog
Talking with Shinnara :: NaraTalk.com

'xpath'에 해당되는 글 1건

  1. 2007/08/22 XPath 를 이용한 XML 문서에서 정보 얻어오기

사용자 삽입 이미지
요즘 들어 포스팅이 늘어가네요. 업무를 통해 얻는 정보나 팁등을 그대로 방치하면 나중에 또 다시 찾아야 하는 문제도 있고, 저와 비슷한 문제로 검색하시는 분들에게 보다 선별된(?) 정보를 드렸으면 합니다.. ^^


프로젝트를 진행하면서 자주 XML을 접하지만, 그 내용을 파싱한다기 보다는 주로 XML 문서를 만들어 전달하는 역할을 하다 보니 문서에서 정보 얻어오는 부분은 기억 저편으로 멀리 보낸듯했다.

그러다 마침 다른 서버로 부터 간단한 XML 문서를 받아 다음의 처리를 결정하는 부분을 구현해야 했답니다.

다음은 간단한 예..
 

[file: response.xml]

<UAResponse>

<IsHandled>true</IsHandled>

<Header>

<ContentType>text/xml; charset=utf-8</ContentType>

</Header>

</UAResponse>


위의 XML 로 부터 ContentType 값을 얻어오는 방법을 간략히 소개하고자 한다. ( XML 및 XPath 에 대해 고수인 분들은 패스~^^ , 이 문서는 XML을 처음 접하는 분을 대상으로한 간략한 소개 페이지 입니다.)

XML 문서를 다루고 그 안의 정보를 찾아내는 방법은 여러가지가 있겠지만, 가장 강력한 방법은 XPath 를 이용한 방법입니다. 다른 처리 방법에 대해서는 관련 문서를 참고하시고... ^^

먼저 소스 코드부터 보여드립니다.

                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                factory.setNamespaceAware(true);
                DocumentBuilder builder = factory.newDocumentBuilder();
                Document doc = builder.parse("response.xml");
               
                XPathFactory xfactory = XPathFactory.newInstance();
                XPath xpath = xfactory.newXPath();
                               
                XPathExpression expr = xpath.compile("//ContentType/text()");
               
                String contentType  = expr.evaluate(doc);

               
너무 간단하지 않나요? 위의 코드는 문서내에 있는 ContentType 에서 처음으로 나타나는 엘리먼트의 text 값을 가져오게 됩니다. 만약 ContentType 이 여러개라면 다음과 같은 형태로 바꿔볼 수 있습니다.


                Object result = expr.evaluate(doc, XPathConstants.NODESET);
               
              NodeList nodes = (NodeList) result;
              for( int i=0; i< nodes.getLength();i++) {
                   System.out.println( nodes.item(i).getNodeValue());
              }


만약 네트워크를 통해 byte[] 형태로 문서를 받으셨다면 Document 를 만들때 다음과 같이 하시면 됩니다.


                      
                ByteArrayInputStream bis = new ByteArrayInputStream(buffer);
               
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                factory.setNamespaceAware(true);
                DocumentBuilder builder = factory.newDocumentBuilder();
                Document doc = builder.parse(bis);


자세한 XPath 의 사용법은 나중에 기회가 되면 다시 적기로 하고, 오늘은 유용한 자료 하나 소개하면서 접을까합니다.



p.s. 생각해보니 package 도 알려드려야 할 것 같아서...
저는 다음과 같이 import 합니다.

    import javax.xml.xpath.*;
    import javax.xml.parsers.*;
    import org.w3c.dom.*;





TAG , ,
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/97 관련글 쓰기

댓글을 달아 주세요

1 
다...... (264)
Computer/Programming (106)
Links (14)
책 읽는 즐거움 (7)
끄적임 (66)
즐거운 과학 나라 (7)
일본 (5)
Study (4)