在Java中规范DOM文档中的XML名称空间?

在Java中规范DOM文档中的XML名称空间?,java,xml,dom,xml-namespaces,Java,Xml,Dom,Xml Namespaces,我想知道是否有一种简单的方法可以“规范化”Java中表示为DOM文档的XML文档中的XML名称空间定义 我需要它的原因是能够比较两个都使用XML名称空间的文档 由于XML名称空间可以在文档中的任何位置指定(在根元素中,在任何元素中),因此从DOM树的角度看,实际上相同的两个文档可能会有很大的不同。例如,一个可以在根元素中定义所有名称空间属性,而另一个可以在适用名称空间的DOM树层次结构中的“最高”元素中定义每个名称空间。本质上,这些文档可以是相同的文档,但是当比较它们时,比如使用XmlUnit,

我想知道是否有一种简单的方法可以“规范化”Java中表示为DOM文档的XML文档中的XML名称空间定义

我需要它的原因是能够比较两个都使用XML名称空间的文档

由于XML名称空间可以在文档中的任何位置指定(在根元素中,在任何元素中),因此从DOM树的角度看,实际上相同的两个文档可能会有很大的不同。例如,一个可以在根元素中定义所有名称空间属性,而另一个可以在适用名称空间的DOM树层次结构中的“最高”元素中定义每个名称空间。本质上,这些文档可以是相同的文档,但是当比较它们时,比如使用XmlUnit,就会出现比较问题

举两个例子:

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

酒吧
vs:


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

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


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

有一个专门用于此目的的。它不是标准的W3C DOM API,但也许它可以满足您的需要。

apache xmlsec项目也有一个,它可以与W3C DOM API.jtalhborn一起使用,谢谢您的提示。不幸的是,在我的例子中,ApacheXML安全规范化程序没有生成规范输出。我的一般问题是名称空间声明,例如:
bar
bar
在本例中,规范形式的XML并不相同,即使文档是effect is.skaffman,我也检查了XOM API,得到了相同的结果。基本上,XML名称空间声明的位置不是“规范化的”,因此在“简单的”XML比较中,这些声明将被视为不同的。我在主要文章中举了一个例子来说明这个问题。@kosMaróy:你找到解决这个问题的方法了吗?@HaseebKhan nope:(
<root>
    <e1 xmlns:foo="http://foo/">
        <foo:e2>bar</foo:e2>
    </e1>
</root>