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);
}
}
JDBC 엑사데이터 RAC 접속 string (0) | 2013.11.29 |
---|---|
gmail을 이용한 java mail sender 프로그램 (0) | 2013.11.11 |
mybatis ORA-01861: literal does not match format string (0) | 2012.11.01 |
주(week)로 부터 날짜 리턴 (0) | 2012.10.25 |
GC 분석을 위한 Heap Dump 생성 option (0) | 2012.02.15 |
댓글 영역