如何更改DOM中每个节点上的命名空间?

Chr*_*s R 5 java xml dom

在给定w3c DOM(Java的默认实现,特别是)更改该DOM中每个元素/属性/节点的命名空间的情况下,我该怎么办?有效地,优选地.DOM上似乎没有setNamespaceURI方法,这很不方便.

我已经尝试过XSL方法,但它们无法在JAXP变换器中工作(尽管它们在Saxon9B中可以正常工作,但由于其他各种原因我无法使用它).

基本上,我需要一个纯粹的核心java解决方案,它允许我获取一个文档并更改其命名空间.

bob*_*nce 10

这在名称空间感知DOM上效率不高.您必须在要更改其名称空间的每个后代元素上使用DOM Level 3 Core方法Document.renameNode(javadoc).(通常不需要更改这么多的Attr节点,因为没有前缀的Attr节点的命名空间始终为null,而不是Element的命名空间.)

如果您只想将一个名称空间替换为另一个名称空间,那么使用名称空间不知道的DOM可能会更快,只需更改有问题的xmlns属性即可.你应该能够通过将DOMConfiguration'namespaces '参数设置为false 来获得一个名称空间不知道的DOM ,但是我没有在Java中尝试过这个,而且这是一个模糊的小东西,因为DOM imps会出错.


Esk*_*sko 3

根据我非常有偏见的观点,你想要的将是一个巨大的痛苦。我已经可以看到类型转换地狱和可靠地完成此操作所需的大量递归 for 循环了!啊,Java的默认实现,我多么讨厌你的NPE:内部的,颠倒的逻辑,简单操作所需的额外步骤!

所以,是的,我的建议是递归 for 循环,并对每个可能的节点类型进行类型转换,根据我个人的经验,Java 的默认实现非常糟糕。