2

我有两个 XmlDocument,它们都指定了命名空间属性。两个文档具有相同的结构,但包含不同的数据。我似乎无法从添加到第二个文档中同一节点树末尾的一个文档中获取特定节点树。这是我的两个文档的示例:

文件#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 回答