상세 컨텐츠

본문 제목

oracle.xml.parser.v2 library namespace parse

소프트웨어/java

by 야솔아빠 2013. 8. 20. 08:28

본문

반응형

parsing 해야 할 XML 예제중 일부(중요한 것은 namespace 가 두개라는 것)

<?xml version="1.0" encoding="UTF-8"?>

<Transaction-SBRRES xmlns="http://xmlns.fly.com/pip/b2b/sbrres"

                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" XDataVersion="2.0" Standard="EDIFACT"

                    Version="121" CreatedDate="2013-08-19T14:51:28" CreatedBy="XEngine_3005"

                    GUID="{644F2DDA-0893-11E3-8019-002128FB77AC}">

    <Internal-Properties>

        <Data-Structure Name="Interchange">

            <Lookup Name="InterchangeControlVersion">1</Lookup>

            <Lookup Name="InterchangeReceiverID">UOZSBRMQ1AU</Lookup>

...



document.selectSingleNode("/Transaction-SBRRES/Loop-SBRI/Loop-Group_89");


이렇게 노드를 검색하면 null 이 리턴된다.(실제로 전체 XML 에는 Loop-Group_89 Element 가 존재한다)


해결방법은 namespace를 사용해야 하는데..

왜 default namespace가 적용안되는지 모르겠다.


아래처럼 적용하면 된다.

CustomNSResolver resolver = new CustomNSResolver();        

resolver.addNS("pip", "http://xmlns.fly.com/pip/b2b/sbrres");

NodeList gr92NodeList = document.selectNodes("/pip:Transaction-SBRRES/pip:Loop-SBRI/pip:Loop-Group_89/pip:Loop-Group_92", resolver);



import java.util.HashMap;


import oracle.xml.parser.v2.NSResolver;


public class CustomNSResolver implements NSResolver {

    private HashMap nsMap = new HashMap();


    public void addNS(String abbrev, String namespace) {

        nsMap.put(abbrev, namespace);

    }


    public String resolveNamespacePrefix(String string) {

        return (String)nsMap.get(string);

    }

}



반응형

관련글 더보기

댓글 영역