前言:我正在为Java开发docx解析器。 docx格式基于xml。当我阅读文档时,其各个部分都已被解组(使用JAXB)。我得到了基于xml标记的某些元素的树。

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

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

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


但这似乎不是一个好的解决方案。我从来没有直接与xerces合作。进行铸造的更好方法是什么? (如果有人也给我一些有关遍历节点的正确方法的提示,那就太好了)。

最佳答案

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

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

xs:XSD中的any表示“任何东西”。


  该元素使我们能够扩展
  元素不为XML文档
  由模式指定。

09-16 06:46