Java + DOM:如何将没有名称空间的DOM树转换为名称空间感知的DOM树?

时间:2010-06-05 17:15:17

标签: 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创建新的名称空间感知Node。这样做,必须手动“解析”名称空间前缀,注意xmlns - 属性,并维护前缀和名称空间URI之间的映射。很多事情都会出错。

1 个答案:

答案 0 :(得分:0)

我认为你发现没有简单的方法可以做到这一点。如果你有一个认为xmlns的旧式DOM:foo =“xxx”是一个属性而不是命名空间声明,那么就没有办法神奇地“升级”它。您必须序列化/重新序列化或手动遍历树并自行转换这些属性。