我正在使用MSXML 4生成以下xml字符串:
<?xml version="1.0">
<Parent_Element xmlns="http://1">
<Child_One>
<Child_Two xmlns="http://2">
<Child_Three>
</Child_Three>
</Child_Two>
</Child_One>
</Parent>
然而,我的IXMLDOMDocument2Ptr的输出总是包含Child_Three的命名空间:
<?xml version="1.0">
<Parent_Element xmlns="http://1">
<Child_One>
<Child_Two xmlns="http://2">
<Child_Three xmlns="http://1">
</Child_Three>
</Child_Two>
</Child_One>
</Parent>
我的理解是这种行为是XML标准的一部分,但是如果存在额外的命名空间,则接收xml的系统会拒绝它。如果存在空名称空间(即xmlns =“”),它也将拒绝xml。
MSXML中是否存在避免为Child_Three添加或删除命名空间的内容?
答案 0 :(得分:2)
我明白了。
1)我有一个缺陷,其中使用了文档命名空间而不是父节点中的命名空间。
2)使用#1的修复,我最终得到一个空名称空间(xmlns =“”)。为了解决这个问题,我必须在创建节点时设置名称空间。在我创建节点之前,然后在单独的调用中添加了xmlns属性。
在:
pNode->createNode(NODE_ELEMENT, name, "");
pAttrib = pNode->createAttribute("xmlns")
pAttrib->put_NodeValue(namespace)
现在:
pNode->createNode(NODE_ELEMENT, name, "namespace");
答案 1 :(得分:0)
答案 2 :(得分:0)
我找到了解决这个问题的方法。问题是MSXML无法处理损坏的命名空间......
我最近有一种情况,在最高级别的标签中,有一个xmlns =&#34; http://...",但这是错误的。应该是:xmlns:xsd =&#34; http://..."。
一旦我将其固定在最顶层的xml标签中,我就可以将xml标签插入到文档中而无需看到xmlns =&#34;&#34;到处。
有趣的是,当您从头开始编写XML文档时,创建标记的层次结构,您将无法获得xmlns =&#34;&#34;标签