Java+DOM:如何将没有命名空间的 DOM 树转换为可感知命名空间的 DOM 树?
Posted
技术标签:
【中文标题】Java+DOM:如何将没有命名空间的 DOM 树转换为可感知命名空间的 DOM 树?【英文标题】:Java+DOM: How do I convert a DOM tree without namespaces to a namespace-aware DOM tree? 【发布时间】:2011-02-28 04:55:51 【问题描述】:我从某个 API(不在 JDK 中)收到 Document
(DOM 树)。可悲的是,这个Document
不支持命名空间。据我所知,DOM一旦生成,之后就不能“添加”命名空间感知。
当使用 Transformer 将此文档转换为字符串时,XML 是正确的。元素具有xmlns:...
属性和名称前缀。但从 DOM 的角度来看,没有命名空间,也没有前缀。
我需要能够将这个Document
转换成一个新的Document
,它是 命名空间感知的。是的,我可以通过将其转换为字符串并返回启用命名空间的 DOM 来做到这一点。
但是:原始树的节点设置了用户对象。转换为字符串并返回将使这些用户对象到新的Document
的映射非常复杂,如果不是不可能的话。所以我真的需要一种将非命名空间 DOM 转换为命名空间 DOM 的方法。
对此有或多或少直接的解决方案吗?
最坏的情况(我希望避免的)是手动遍历旧的Document
树并为每个旧的Node
创建新的命名空间感知Node
。这样做,必须手动“解析”命名空间前缀,注意xmlns
-attributes,并维护前缀和命名空间-URI 之间的映射。很多事情都会出错。
【问题讨论】:
你有没有在这方面取得任何进一步的进展?我也有类似的情况。 【参考方案1】:我想你发现没有简单的方法可以做到这一点。如果您有一个认为 xmlns:foo="xxx" 是属性而不是名称空间声明的旧式 DOM,则无法神奇地“升级”它。您必须序列化/重新序列化或手动遍历树并自己转换这些属性。
【讨论】:
以上是关于Java+DOM:如何将没有命名空间的 DOM 树转换为可感知命名空间的 DOM 树?的主要内容,如果未能解决你的问题,请参考以下文章
在 Java DOM 中创建以命名空间为前缀的 XML 节点
使用 DOM 解析器在 Java 中解析具有 2 个默认命名空间的 XML