【问题标题】:What is the correct way to handle object which is instance of class in apache.xerces?处理作为 apache.xerces 中类实例的对象的正确方法是什么?
【发布时间】:2010-03-23 15:11:39
【问题描述】:

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

【问题讨论】:

    标签: java xerces


    【解决方案1】:

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

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

    xs:any 在 XSD 中的意思是“任何东西”。

    元素使我们能够扩展 不包含元素的 XML 文档 由架构指定。

    【讨论】:

    • 不,任何都是正常的。在规范中是any
    • 那你就在 DOM 行业了。
    • 感谢您的回答,这至少是一个很好的起点。顺便说一句,关于any:你认为我不能“硬编码”路径并且必须使用 XPath 吗?我想说:“任何”是否意味着真的可以有任何东西?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    相关资源
    最近更新 更多