c++ - MSXML DOM : Add namespace declaration to an existing node in a tree

标签 c++ xml dom namespaces msxml

问题描述:读取一个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/

相关文章:

xml - 如何通过 XPath 选择缺少属性值的元素?

javascript - 试图删除 jQuery

html - MS Access VBA 从 Web 浏览器控件的内容中获取数据

javascript - 无论它在 DOM 中的什么位置,我怎样才能使用 jquery 获取下一个/上一个链接?

c++ - 如何在不同模板类的模板类中使用嵌套模板类

c++ - 模棱两可的错误 : template C++

c++ - 如何找到两个不同坐标系中对应点之间的旋转和平移(变换矩阵)

c# 从字节数组创建 xml

c++ - 如何检查 void* 是否指向对象类型的有效实例上的指针?

java - IOException 从类路径资源解析 XML 文档