2

名前空間属性が指定されている2つのXmlDocumentがあります。両方のドキュメントは同じ構造ですが、異なるデータが含まれています。2番目のドキュメントの同じノードツリーの最後に追加された1つのドキュメントから特定のノードツリーを取得できないようです。これが私の2つのドキュメントの例です:

ドキュメント#1:

<?xml version="1.0"?>
<rootnode xmlns="http://www.mynamespace.com/Service/2012-06-18">
    <node0>
    </node0>
    <node1>
        <Item>
            <Id>1</Id>
            ....
        </Item>
        <Item>
            <Id>2</Id>
            ....
        </Item>
        <Item>
            <Id>3</Id>
            ....
        </Item>
    </node1>
</rootnode>

ドキュメント#2

<?xml version="1.0"?>
<rootnode xmlns="http://www.mynamespace.com/Service/2012-06-18">
    <node0>
    </node0>
    <node1>
        <Item>
            <Id>4</Id>
            ....
        </Item>
        <Item>
            <Id>5</Id>
            ....
        </Item>
        <Item>
            <Id>6</Id>
            ....
        </Item>
    </node1>
</rootnode>

私が達成したいこと:

<?xml version="1.0"?>
<rootnode xmlns="http://www.mynamespace.com/Service/2012-06-18">
    <node0>
    </node0>
    <node1>
        <Item>
            <Id>1</Id>
            ....
        </Item>
        <Item>
            <Id>2</Id>
            ....
        </Item>
        <Item>
            <Id>3</Id>
            ....
        </Item>
        <Item>
            <Id>4</Id>
            ....
        </Item>
        <Item>
            <Id>5</Id>
            ....
        </Item>
        <Item>
            <Id>6</Id>
            ....
        </Item>
    </node1>
</rootnode>

<Item>他のすべてのノードの構造を維持しながら、あるドキュメントから別のドキュメントにすべてのノードを追加しようとしています。どちらのドキュメントにも任意の数の<Item>ノードがあります。各<Item>ノードには、アイテムを説明するノードのネストされた数があります。

Dim dstdoc As XmlDocument = myobject1.XmlDocument
Dim srcdoc As XmlDocument = myobject2.XmlDocument

Dim nsmgr As New XmlNamespaceManager(New NameTable)
nsmgr.AddNamespace("ns", "http://www.mynamespace.com/Service/2012-06-18")

Dim xpath As String = "ns:rootnode/ns:node1//ns:Item"

Dim copiedNode As XmlNode = dstdoc.ImportNode( _
                            srcdoc.SelectSingleNode(xpath, nsmgr), True)
dstdoc.DocumentElement().AppendChild(copiedNode)

私は確かにこれが間違っていることを知っています...私はいくつかの異なるアプローチを試しました。この特定のアプローチでは、すべての<Item>ノードが宛先ドキュメントに追加されますが、最後のノードの後ではなく、ドキュメントの一番下に追加されます<Item>

特定のノードツリーXmlDocumentを別のドキュメントの特定の位置に追加する方法を教えてもらえますか?ここでも、関連する名前空間があり、<Item>ノードにはそれぞれの下にネストされたノード/要素があります。

注:<Id>ノードには、一意性のみを示すサンプルデータがあります。私はどんな種類の番号付けも期待できません。各<Item>ノードの順序はまったく重要ではありません。<Item>宛先ドキュメントの最後のノードの後に​​ノードを追加するのが最も簡単だと思います。

4

1 に答える 1

2

あなたは近くにいます。この行は正しくありません:

dstdoc.DocumentElement().AppendChild(copiedNode)

これは、「ドキュメント要素」(つまりルート要素) に追加することを明示的に示しています。宛先ドキュメントの特定の要素に追加する場合は、最初にそのターゲット要素への参照を取得する必要があります。

Dim destElement As XmlNode = dstdoc.SelectSingleNode("ns:rootnode/ns:node1", nsmgr)
For Each sourceNode in srcdoc.SelectNodes(xpath, nsmgr)
    Dim imported As XmlNode = dstdoc.ImportNode(sourceNode, True)
    destElement.AppendChild(imported)
Next
于 2012-06-19T03:58:14.737 に答える