Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MSXML DOM:将命名空间声明添加到树中的现有节点_C++_Xml_Dom_Namespaces_Msxml - Fatal编程技术网

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

C++ MSXML DOM:将命名空间声明添加到树中的现有节点,c++,xml,dom,namespaces,msxml,C++,Xml,Dom,Namespaces,Msxml,问题描述:读取xml文件,遍历到特定节点(元素),如果它没有特定的命名空间声明,则添加所需的命名空间声明,然后写出该文件 我需要用C++的微软MSXML DOM API来实现这一点。根据此msdn,IXMLDOMNode COM对象上的namespaceURI属性是只读的。感谢任何变通方法 编辑:我花了相当长的时间在一个变通方法上:在同一文档中创建一个具有我需要的名称空间的新同级节点,然后将原始节点的所有子元素移动到此新节点,然后删除原始节点。这是行不通的,因为子节点将保留它们以前拥有的任何默认

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

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

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


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

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

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


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

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

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


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

您的意思是要为本应指定名称空间的元素添加默认名称空间吗?e、 g.xmlns=“someuri”您的意思是要将默认名称空间添加到本应分配名称空间的元素中吗?e、 g.xmlns=“someuri”