1

前言:我正在为 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 合作过。进行这种铸造的更好方法是什么?(如果有人也给我一个关于迭代节点的正确方法的提示,那就太好了)。

4

1 回答 1

3

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

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

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

该元素使我们能够使用模式未指定的元素来扩展 XML 文档。

于 2010-03-23T15:15:56.993 回答