본문 바로가기
카테고리 없음

JAVA xml 데이터 파싱 ( Xpath 이용 방법 )

by 원피스랜드 2020. 12. 30.
반응형

String 데이터 xml 파싱 하는 내용 정리 해요.

 

개발자는 백번의 글과 말보다 코드가 낫다.

 

Example 코드

 

public static void main(String[] args)
{
        StringBuffer sb = new StringBuffer();
        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
        sb.append("<root>");
        sb.append("<name>ynkim</name>");
        sb.append("<age>18</age>");
        sb.append("<addr>서울시 서초구 서초역 3번 출구</addr>");
        sb.append("<customerTel>01099991234</customerTel>");
        sb.append("</root>");

        InputStream is = new ByteArrayInputStream(sb.toString().getBytes());
        Document doc = null;
        try
        {
            doc = parseXML(is);
        } catch (Exception e)
        {
            e.printStackTrace();
        }
        // XPath 인스턴스 생성
        XPath xpath = XPathFactory.newInstance().newXPath();
        // 대상 노드 지정
        // 하위 path를 지정할때는 /root/name 과 같이 접근하면 됨
        String expression = "/root";
        
        // 지정 노드로 부터 노드목록 획득
        NodeList nl = null;
        try
        {
            nl = (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET);
        }
        catch (XPathExpressionException e)
        {
            e.printStackTrace();
        }

        // 첫번째 노드의 부모 노드명을 출력
        System.out.println(nl.item(0).getParentNode().getNodeName());
        System.out.println("sub node start!!");
        System.out.println("-----------------------------------------------------");
        // 1번째  book 노드의 자식노드 목록을 획득
        NodeList nodeList = nl.item(0).getChildNodes(); // author, title, genre, price, publish_date, description

        System.out.println(nodeList.item(0).getParentNode().getNodeName());
        // 확보된 노드 목록을 순서대로 출력
        for(int i=0; i<nodeList.getLength(); i++)
        {
            Node node = nodeList.item(i);

            // 현재 노드 인덱스 번호 출력
            if (node.getNodeType() == Node.ELEMENT_NODE)
            {
                System.out.println("Element Node Node Name = " + node.getNodeName());
                System.out.println("Element Node Text Content = " + node.getTextContent());
            }
            if (node.getNodeType() == Node.TEXT_NODE) {
                System.out.println("Text Node Node Name = " + node.getNodeName());
                System.out.println("Text Node Text Content = " + node.getTextContent());
            }
        }

        System.out.println("-----------------------------------------------------");


    }

    public static Document parseXML(InputStream stream) throws Exception
    {
        DocumentBuilderFactory objDocumentBuilderFactory = null;
        DocumentBuilder objDocumentBuilder = null;
        Document doc = null;
        try
        {
            objDocumentBuilderFactory = DocumentBuilderFactory.newInstance();
            objDocumentBuilder = objDocumentBuilderFactory.newDocumentBuilder();
            doc = objDocumentBuilder.parse(stream);
        }catch(Exception ex){
            throw ex;
        }
        return doc;
    }
반응형

댓글