1

问题描述:读取一个xml文件,遍历到特定的节点(元素),如果没有特定的命名空间声明,添加需要的命名空间声明,并写出文件。

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

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

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

4

1 回答 1

1

猜测您的意思是向元素添加默认命名空间,首先重要的是要了解这在严格意义上是不可能的。元素名称所属的名称空间形成它的完全限定名称,因此“添加”默认名称空间等同于重命名元素。DOM 中没有内置机制来重命名元素。

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

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

于 2009-07-11T21:01:17.850 回答