Java+DOM : How do I convert a DOM tree without namespaces to a namespace-aware DOM tree?

标签 java xml dom namespaces xml-namespaces

我从某个 API(不在 JDK 中)收到一个 Document(DOM 树)。遗憾的是,此 Document 不支持命名空间。据我所知,DOM 一旦生成,命名空间意识就无法在之后“添加”。

使用 Transformer 将此 Document 转换为字符串时,XML 是正确的。元素具有 xmlns:... 属性和名称前缀。但从 DOM 的角度来看,没有命名空间,也没有前缀。

我需要能够将此 Document 转换为一个新的Document,它 命名空间感知的。是的,我可以通过将它转换为字符串并返回到启用命名空间的 DOM 来实现这一点。

但是:原始树的节点设置了用户对象。转换为字符串并返回将使这些用户对象到新的 Document 的映射非常复杂,如果不是不可能的话。所以我真的需要一种方法将非命名空间 DOM 转换为命名空间 DOM。

是否有任何或多或少直接的解决方案?

最坏的情况(我希望避免的情况)是手动遍历旧的 Document 树并为每个旧的创建新的命名空间感知 Node 节点。这样做,必须手动“解析” namespace 前缀,注意 xmlns 属性,并维护前缀和 namespace URI 之间的映射。很多事情都会出错。

最佳答案

我想您已经发现没有简单的方法可以做到这一点。如果您有一个旧式 DOM,认为 xmlns:foo="xxx"是一个属性而不是 namespace 声明,则无法神奇地“升级”它。您将不得不序列化/重新序列化或手动遍历树并自己转换这些属性。

关于Java+DOM : How do I convert a DOM tree without namespaces to a namespace-aware DOM tree?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2981283/

相关文章:

java - 客户端发送的请求在语法上错误

java - SAX 解析器可以在 Java 中使用 XPath 吗?

java - 无法从 android.app.Application 转换为自定义类型

c# - <> 转换为 64BaseString 和从 64BaseString 时 Xml 丢失

javascript - 如何处理 javascript 中输入元素状态的编程更改

java - 有没有替代 TextView 的方法?

java - 如何在 LWJGL 中渲染 3d 立方体?

java - 如何将cpp回调函数指针发送给java

javascript - 在 d3.js 中使用 HTML 代替 SVG

java - 如何自己从 XML 文件构建 DOM 树,即不使用 DocumentBuilder.parse(xml)?