2010-03-23 113 views
1

前言:我正在研究用于java的docx解析器。 docx格式基于xml。当我阅读文档时,其部分被解组(JAXB)。我得到了一些基于xml标记的元素的树。在apache.xerces中处理类实例的对象的正确方法是什么?

几乎问题:但是一些元素(这是在非常深的XML级)不返回某些类从DOCX规范(即CTStyle,CTDrawing,CTInline等),但作为对象。这些对象确实是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。您应该投射到'元素',而不是'元素NSImpl'。然后,您必须使用DOM API(可能在XPath的协助下)来提取数据。

如果JAXB提供了元素,并且您认为该模式具有特定类型,而不是xs:any,那么您配置JAX-B的方式会出现问题。

xs:任何在XSD中的意思是'任何'。

该元素使我们能够扩展 XML文档,其中元素不是由模式指定的元素 。

+0

不,一切正常。这是规范中的“任何”。 – Roman 2010-03-23 15:24:48

+0

然后你在DOM业务。 – bmargulies 2010-03-23 15:27:27

+0

感谢您的回答,它至少是一个很好的起点。顺便说一句'任何':你认为我不能'硬编码'的路径,必须使用XPath?我想说:“任何”意味着什么都可以有。 – Roman 2010-03-23 15:28:18

相关问题