如何在Java中的非根元素中添加xml命名空间?

时间:2012-03-06 23:52:12

标签: java xml namespaces xml-namespaces

我收到的xml看起来像这样,并使用XMLBeans来解析它:

<reply xmlns="http://www.xmlisfun.com/abc/def/1.0">
    <item-list>
        <item>
            <item-data>data</item-data>
        </item>
    </item-list>
</reply>

架构中存在一个名为ItemListReplyType的复杂类型,该类型已导入。

由于有人在使用模式定义,因此XMLBeans解析的对象将无法正确生成ItemListReplyType对象。 ItemListReplyType对象将始终说它不包含任何“item”对象。这是由于某些命名空间冲突造成的。

我注意到,当我解析以下内容时,我能够在ItemListReplyType对象的代码中正常检索我的对象数组(数组不为空 - “item”对象按预期存在)。

<reply xmlns="http://www.xmlisfun.com/abc/def/1.0">
    <item-list>
        <prefix:item xmlns:prefix="http://www.xmlisfun.com/particular_namespace">
            <prefix:item-data>data</prefix:item-data>
        </prefix:item>
    </item-list>
</reply>

毋庸置疑,正确的解决方案是修复对模式的破解并重新生成所有XMLBeans对象。然而,在项目建立在所有这些对象之前,这将是一年前的一个强大的解决方案。我宁可不要惹这个。

有没有办法轻松修改XML,为所有项元素及其子元素添加命名空间和前缀?我正在努力手动完成它并完成它。我想我会在这里查看帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

不确定您的XML是什么形式。您提出的mod过于复杂,您只需要一个 调整item元素以添加xmlns =“blah”。可能很容易做一个快速的字符串黑客或正确的修复是运行xsl转换或parse-fix-serialise步骤添加xmlns位。 HTH