2

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の名前空間の追加または削除を回避する方法はありますか?

4

3 に答える 3

3

私はそれを考え出した。

1)親ノードの名前空間の代わりにドキュメントの名前空間が使用されるという欠陥がありました。

2)#1の修正により、名前空間(xmlns = "")が空になりました。これを修正するには、ノードの作成時に名前ペースを設定する必要がありました。ノードを作成してから、別の呼び出しでxmlns属性を追加する前。

前:

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

今:

pNode->createNode(NODE_ELEMENT, name, "namespace");
于 2010-01-16T23:29:30.597 に答える
0

MSXMLは、表現するように指示した名前空間を正確に表現します。

引用から、 http:// 1の名前空間でchild3ノードを作成したように見え、http://2の名前空間で作成する必要があります。

于 2010-01-16T22:57:27.177 に答える
0

私はこの問題の解決策を見つけました。問題は、MSXMLが壊れた名前空間を処理できないことです...

最近、最高レベルのタグにxmlns = "http:// ..."があるという状況がありましたが、これは間違っていました。xmlns:xsd = "http://..."である必要があります。

一番上のxmlタグでそれを修正すると、どこにでもxmlns = ""が表示されなくても、ドキュメントにxmlタグを挿入できます。

興味深いことに、最初からXMLドキュメントを作成し、タグの階層を作成すると、xmlns=""タグは取得されません。

于 2017-05-18T14:15:11.813 に答える