2013-05-30 1 views
2

최근에 xjc 도구를 사용하여 XSD 기반의 일련의 객체를 만들었습니다.JAXB가 XML에서 개별 요소를 검색합니다.

<foos> 
</foos> 
<foo> 
</foo> 
<foo_detail_1> 
</foo_detail_1> 
<foo_detail_2> 
</foo_detail_2> 

적합하지 않습니다 : 내가 가진 문제는 내가 지금과 같은 소스에서 XML을받을 수있다. 내 질문은 XML을 언 마샬링 (unmarshall)하려고 할 때 어떻게하면 개별 객체를 만들 수 있습니까? 즉과 같이이다 :

Foo foo = (Foo)um.unmarshal("myXML.xml"); 
Foo_Detail_1 fd = (Foo_Detail_1)um.unmarshal("myXML.xml"); 

또는 XPath는 이러한 특성을 채우는 등이 접근하는 올바른 방법은 무엇 인 경우에 사용이 많은 운동이다?

답변

2

옵션 # 1 - StAX를

에 사용 JAXB 당신은 StAX를 XMLStreamReader으로 XML을 구문 분석 할 수는 다음 foos 요소로 발전 Foos의 인스턴스를 비 정렬 화. 그런 다음 XMLStreamReaderfoo 요소로 전달하고 Foo 등의 인스턴스를 비선형으로 처리하는 식으로 진행합니다. 추가 정보

옵션 # 2-

당신은 래퍼 객체가 루트 요소에 대응 만들 수있는 래퍼 개체 만들기, 그런 다음 인스턴스를 비 정렬 화하고 개인을 얻습니다. 그것으로부터의 물건.

+1

전체 문서를 여러 번 통과하지 않아도되도록 단일 패스로 처리하는 것이 좋습니다. FWIW 전체 파일이 메모리에 저장됩니다. – Woot4Moo

+0

@ Woot4Moo - StAX 파서는 문서를 한 번만 탐색합니다. 또는 모든 개별 개체를 포함하는 루트 개체를 만들 수 있습니다. –

+0

그래서 래퍼 노드를 만들면'Wrapper w = (Wrapper) unmarshall (myXml.xml)'을 수행하고 객체 모음을 가지고 재생할 수 있습니까? – Woot4Moo

관련 문제