问题描述:读取一个xml文件,遍历到一个特定的节点(元素),如果没有特定的命名空间声明,则添加需要的命名空间声明,并写出文件。
我需要使用 Microsoft 的 MSXML DOM API 在 C++ 中执行此操作。根据此 msdn reference,IXMLDOMNode COM 对象上的 namespaceURI 属性是只读的.感谢任何解决方法。
编辑:我花了很多时间在解决方法上:在同一个文档中使用我需要的命名空间创建一个新的兄弟节点,然后将原始节点的所有子元素移动到这个新节点,然后删除原来的节点。好吧,这行不通,因为子节点将保留它们之前拥有的任何默认命名空间。
然后这个简单的想法打动了我,它奏效了,但我不确定它将来是否会影响我:只需在元素上创建一个“xmlns”属性,并为其赋予所需的命名空间值!有什么意见吗?
最佳答案
我猜你的意思是给一个元素添加一个默认的命名空间,首先要明白这是不可能的。元素名称所属的命名空间构成了它的完全限定名称,因此“添加”默认命名空间等同于重命名该元素。 DOM 中没有内置机制来重命名元素。
最严格的方法是将 XML 作为转换的输入进行处理(通过代码或通过 XSLT),生成正确的 XML 输出。
然而,一个实用的解决方案是使用一些字符串处理(如 RegEx)来查找元素并注入(inject) xmlns 属性。我个人更喜欢前者。
关于c++ - MSXML DOM : Add namespace declaration to an existing node in a tree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1114594/