在apache.xerces中处理对象的正确方法是什么?

时间:2010-03-23 15:11:39

标签: java xerces

前言:我正在研究java的docx解析器。 docx格式基于xml。当我阅读文档时,其部件正在被解组(使用JAXB)。我得到一个基于xml标记的某些元素的树。

几乎问题:但是某些元素(在非常深的xml级别)不是从docx规范(即CTStyle,CTDrawing,CTInline等)返回的某个类,而是返回Object。这些对象确实是xerces类的实例,例如ElementNSImpl。

问题:我应该如何处理来自xerces的对象(例如ElementNSImpl)?最简单的方法是:

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

但它似乎不是一个好的解决方案。我从未直接使用过xerces。做这个演员的更好方法是什么? (如果有人也给我一个关于正确迭代节点的方法的提示,那就太好了。)

1 个答案:

答案 0 :(得分:3)

因为XSD有一个'any',JAX-B正在将这段XML映射到DOM。您应该转换为'Element',而不是'ElementNSImpl'。然后,您必须使用DOM API(可能在XPath的帮助下)来提取数据。

如果JAXB为您提供了元素,并且您认为架构具有特定类型,而不是xs:any,则说明配置JAX-B的方式有问题。

xs:XSD中的任何一个意味着'任何'。

  

该元素使我们能够扩展   没有元素的XML文档   由架构指定。

相关问题