需要借助加入的命名空间停止MSXML(Need help stopping MSXML from a

2019-10-19 04:16发布

我使用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拒绝它,如果额外的命名空间是存在的。 它也将拒绝该XML,如果有一个空的命名空间(即的xmlns =“”)。

反正是有在MSXML避免添加或删除Child_Three命名空间?

Answer 1:

我想到了。

1)我有其中使用而不是在父节点中的命名空间中的文档的命名空间中的缺陷。

2)在从#1的修复,我结束了一个空的命名空间(的xmlns =“”)。 为了corect此我不得不设置namepace创建节点时。 我创建的节点,然后加入之前中的xmlns单独调用属性。

之前:

pNode->createNode(NODE_ELEMENT, name, "");
pAttrib = pNode->createAttribute("xmlns")
pAttrib->put_NodeValue(namespace)

现在:

pNode->createNode(NODE_ELEMENT, name, "namespace");


Answer 2:

MSXML将代表正是你告诉它代表的命名空间。

从你的报价,这看起来好像你的命名空间创建的child3节点的http:// 1 ,你需要用的命名空间创建它的http:// 2 。



Answer 3:

我找到了解决这个问题。 问题是,MSXML无法处理破命名空间...

我最近有一个情况下最高级别的标签,有一个的xmlns =“HTTP:// ......”,但这是错误的。 它应该是:的xmlns:XSD = “HTTP:// ...”。

一旦我固定在最上面的XML标记,我可以插入XML标签到文档中没有看到的xmlns =“”无处不在。

有趣的是,当你从一开始就写一个XML文档,创建标签的层​​次,你不会得到的xmlns =“”标签。



文章来源: Need help stopping MSXML from adding namespaces
标签: xml msxml msxml4