代码之家  ›  专栏  ›  技术社区  ›  user15071

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

  •  1
  • user15071  · 技术社区  · 15 年前

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

    我需要用微软的MSXML DOM API来做C++。根据此msdn,IXMLDOMNode COM对象上的namespaceURI属性是只读的 reference . 感谢任何变通方法。

    编辑 :我花了相当多的时间在一个解决方法上:在同一文档中创建一个新的同级节点,使用我需要的名称空间,然后将原始节点的所有子元素移动到此新节点,然后删除原始节点。这是行不通的,因为子节点将保留它们以前拥有的任何默认名称空间。

    然后这个简单的想法打动了我,它起了作用,但我不确定它将来是否会咬我:只需在元素上创建一个“xmlns”属性,给它所需的名称空间值!有什么评论吗?

    1 回复  |  直到 15 年前
        1
  •  1
  •   AnthonyWJones    15 年前

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

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

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