用Java标准化DOM文档中的XML名称空间?

时间:2012-05-11 14:25:55

标签: java xml dom xml-namespaces

我想知道在Java中表示为DOM文档的XML文档中是否有一种直接的方法来“规范化”XML命名空间定义?

我需要这个的原因是能够比较两个使用XML命名空间的文档。

因为XML命名空间可以在文档中的任何地方指定(在根元素中,在任何元素中)等,当从DOM树的角度来看时,实际上相同的两个文档可能会有很大不同。例如,一个可以在根元素中定义所有命名空间属性,而另一个可以在DOM树层次结构中适用命名空间的“最高”元素定义每个命名空间。从本质上讲,它们可以是相同的文档,但在比较它们时,比如XmlUnit,就会得到比较问题。

提供两个例子:

<root xmlns:foo="http://foo/">
    <e1>
        <foo:e2>bar</foo:e2>
    </e1>
</root>

VS

<root>
    <e1 xmlns:foo="http://foo/">
        <foo:e2>bar</foo:e2>
    </e1>
</root>

这些文档实际上是相同的,但XML比较会发现它们不同。

我想知道是否有一种直接/简单的方法来规范化名称空间定义,比如说,将它们全部放在根元素中?

当然可以自己编写这样的代码,但如果已经可以使用,那就更好了:)

1 个答案:

答案 0 :(得分:4)

XOM API正好有Canonicalizer。它不是标准的W3C DOM API,但也许它可以满足您的需求。