2010-03-23 3 views
1

서문 : java 용 docx 파서에서 작업하고 있습니다. docx 형식은 xml을 기반으로합니다. 문서를 읽을 때 JAXB를 사용하여 파트가 비 정렬 화됩니다. 그리고 XML 마크 업을 기반으로하는 특정 요소의 트리가 있습니다.apache.xerces에서 클래스의 인스턴스 인 객체를 처리하는 올바른 방법은 무엇입니까?

거의 문제 : 그러나 일부 요소 (매우 깊은 xml 수준)는 docx spec (즉, CTStyle, CTDrawing, CTInline 등)의 특정 클래스가 아닌 Object로 반환되었습니다. 이러한 객체는 실제로 xerces 클래스의 인스턴스입니다. ElementNSImpl.

문제 : xerces (예 : ElementNSImpl)의 객체를 어떻게 처리해야합니까? 가장 간단한 방법은 다음과 같습니다.

CTGraphicData gData = getGraphicData(); 
Object obj = gData.getAny().get(0); 
ElementNSImpl element = (ElementNSImpl)obj; 

그러나 좋은 해결책은 아닙니다. 나는 xerces로 직접 일한 적이 없다. 이 캐스팅을 수행하는 더 좋은 방법은 무엇입니까? (누구든지 나에게 노드를 반복하는 올바른 방법에 대한 팁을 주면 멋질 것입니다.)

답변

3

XSD에 'any'가 있기 때문에 JAX-B는 해당 XML을 DOM에 매핑합니다. 'ElementNSImpl'이 아닌 'Element'로 캐스팅해야합니다. 그런 다음 XPath를 사용하여 DOM API를 사용하여 데이터를 가져와야합니다.

JAXB에서 요소를 제공하고 있고 스키마에 xs : any가 아닌 특정 유형이 있다고 생각하는 경우 JAX-B를 구성하는 방법에 문제가 있습니다.

xs : XSD의 '무엇이든'을 의미합니다.

요소는 스키마에 의해 지정된 요소하지 와 에게 XML 문서를 확장하기 위해 우리가 할 수 있습니다.

+0

아니요, 정상입니다. 그것은 사양의'any'입니다. – Roman

+0

그러면 DOM 비즈니스에 있습니다. – bmargulies

+0

답변을 주셔서 감사합니다, 적어도 it'a 좋은 출발점. 'any'에 대한 BTW : 경로를'하드 코딩 '할 수없고 XPath를 사용해야한다고 생각합니까? 나는 말하고 싶다 : '어떤 것'이라도 실제로 어떤 것이있을 수 있다는 것을 의미 하는가? – Roman

관련 문제