2014-06-11 2 views
1

저는 JAXB와 XML을 처음 접했습니다.비누에서 XML 노드 추출하기

은 내가 MYNODE에 대한 XSD 파일이 그것에 JAXB 달렸다

<?xml...?> 
<ns2:Envelope xmlns:ns2="http://www.w3.org/2003/05/soap-envelope" 
       xmlns="http://alpha..." 
       xmlns:ns3="http://gama..."> 
<ns2:Body> 
    <ns3:Mynode> 
    ... 
    </ns3:Mynode> 
</ns2:Body> 

같은 XML을 가지고, 그래서 클래스 Mynode.java 있습니다.

가 나는 XML 문자열을 받고, 나는이 같은 구문 분석 :

DocumentBuilderFactory docFac = DocumentBuilderFactory.newInstance(); 
Document doc = docFac.newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes())); 
NodeList ns3mynode = doc.getElementsByTagName("ns3:Mynode"); 
JAXBContext jaxbContext = JAXBContext.newInstance(Mynode.class); 
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); 
return unmarshaller.unmarshal(node.item(0)); 

하지만 자바는 그가 네임 스페이스 NS3 ...도 많이하게 기대하지 않는 것을 말하고, 예외가 발생합니다 의미의.

네임 스페이스를 존중하여 XML에서 ns3 : Mynode를 추출하는 가장 좋은 방법은 무엇입니까?

감사합니다.

답변

1

노드가 부모로부터 네임 스페이스 선언을 상속 받기 때문에 (노드 노드를 추출하지 않았 으면 참조하고있는 것입니다.) 오케이. DocumentBuilderFactory의 인스턴스에서 setNamespaceAware(true)으로 전화하는 것을 잊어 버렸습니다.

+1

Blaise, 정말 고마워. 그것은 효과가 있었다. 나는 너의 블로그를 볼 것이다. 다시 한 번 감사드립니다. –