gpt4 book ai didi

java - 处理作为 apache.xerces 中类实例的对象的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-29 06:22:27 25 4
gpt4 key购买 nike

前言:我正在为 java 开发 docx 解析器。 docx格式是基于xml的。当我阅读文档时,它的部分正在被解码(使用 JAXB)。我得到了一棵基于 xml 标记的特定元素树。

几乎是问题:但是某些元素(处于非常深的 xml 级别)不是作为 docx 规范中的某个类(即 CTStyle、CTDrawing、CTInline 等)返回,而是作为对象返回。这些对象确实是 xerces 类的实例,例如元素NSImpl.

问题:我应该如何处理来自 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:any 在 XSD 中表示“任何东西”。

The element enables us to extend the XML document with elements not specified by the schema.

关于java - 处理作为 apache.xerces 中类实例的对象的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2501005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com