我从某个API(不在JDK中)收到Document
(DOM树)。遗憾的是,这个Document
不支持名称空间。据我所知,DOM一旦生成,就无法在之后“添加”名称空间感知。
使用Transformer将此Document转换为字符串时,XML是正确的。元素具有xmlns:...
属性和名称前缀。但从DOM的角度来看,没有名称空间也没有前缀。
我需要能够将此Document
转换为新的Document
名称空间感知。是的,我可以通过将其转换为字符串并返回到启用了名称空间的DOM来实现此目的。
但是:原始树的节点设置了用户对象。转换为字符串和返回将使这些用户对象映射到新的Document
非常复杂,如果不是不可能的话。所以我真的需要一种方法将非命名空间DOM转换为命名空间DOM。
对此有任何或多或少的直接解决方案吗?
最糟糕的情况(我希望避免的情况)是手动迭代旧的Document
树,并为每个旧的Node
创建新的名称空间感知Node
。这样做,必须手动“解析”名称空间前缀,注意xmlns
- 属性,并维护前缀和名称空间URI之间的映射。很多事情都会出错。
答案 0 :(得分:0)
我认为你发现没有简单的方法可以做到这一点。如果你有一个认为xmlns的旧式DOM:foo =“xxx”是一个属性而不是命名空间声明,那么就没有办法神奇地“升级”它。您必须序列化/重新序列化或手动遍历树并自行转换这些属性。