2010-06-05 81 views
3

我从某个API(不在JDK中)收到Document(DOM树)。不幸的是,Document不支持命名空间。就我所知,DOM一旦生成,名称空间感知就不能在之后“添加”。Java + DOM:如何将没有名称空间的DOM树转换为支持名称空间的DOM树?

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

我需要能够将此Document转换为新的Document,其中名称空间感知。是的,我可以通过将其转换为字符串并返回到启用了命名空间的DOM来完成此操作。

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

对此有没有更多或更简单的解决方案?

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

+0

你有没有在这方面取得进一步的进展?我有类似的情况。 – mrswadge 2014-09-04 11:55:35

回答

0

我想你想通了,没有简单的方法来做到这一点。如果你有一个旧式的DOM认为xmlns:foo =“xxx”是属性而不是命名空间声明,那么就没有办法神奇地“升级”它。你将不得不序列化/ reserialize或手动走树,并自己转换这些属性。

相关问题