MSXML DOM:将名称空间声明添加到树中的现有节点

时间:2009-07-11 20:39:15

标签: c++ xml dom namespaces msxml

问题描述:读取xml文件,遍历特定节点(元素),如果它没有特定的名称空间声明,则添加所需的名称空间声明,然后写出文件。 / p>

我需要使用Microsoft的MSXML DOM API在C ++中执行此操作。 IXMLDOMNode COM对象上的namespaceURI属性根据此msdn reference是只读的。感谢任何解决方法。

编辑:我花了很多时间在一个解决方法上:在我需要的命名空间的同一文档中创建一个新的兄弟节点,然后将原始节点的所有子元素移动到这个新节点,然后删除原始节点。好吧,这不起作用,因为子节点将保留它们以前的默认命名空间。

然后这个简单的想法击中了我并且它有效但我不确定它是否会在将来咬我:只需在元素上创建一个“xmlns”属性,为它提供所需的命名空间值!有什么意见吗?

1 个答案:

答案 0 :(得分:1)

猜测你的意思是向一个元素添加一个默认的命名空间,它的第一个重要的是要明白这不是严格可行的。元素名称所属的命名空间形成完全限定名称,因此“添加”默认命名空间等同于重命名元素。 DOM中没有内置机制来重命名元素。

最严格的方法是将XML作为转换的输入(在代码中或通过XSLT)处理,以生成更正的XML输出。

然而,实用的解决方案是使用一些像RegEx这样的字符串处理来查找元素并注入xmlns属性。我个人更喜欢前者。