Xpath复制和删除节点

时间:2014-02-05 11:09:03

标签: c# xpath

我遇到了xpath问题,如果检查了这个条件,我必须将子节点复制到父节点:IdchildNode = IdparentNode。

我的代码:

string IDchildnode = "1492";

string xpathNodeToCopy = "/a:SL/a:Data/a:ChildNode[@id=\"" + IDchildnode + "\"]";
nodeToClone = doc.SelectSingleNode(xpathNodeToCopy, xnsm);

if (nodeToClone != null)
{
    nodeToCopy = nodeToClone.Clone();

    string xpathNodePlaceToCopy = "/a:SL/a:Sub/a:VolLevel/a:Bay/*/a:ParentNode[@lid=\"" + IDchildnode + "\"]";

    XmlNodeList nodeList = doc.SelectNodes(xpathNodePlaceToCopy, xnsm);

    if (nodeList != null)
    {
        for (int i = 0; i <= nodeList.Count; i++)
        {
            nodeList[i].AppendChild(nodeToCopy);
            doc.Save(sourceFile);
        }
    }
}

我不理解的现象发生了,我在我的代码中设置了一个断点,并且我并行检查是否在我的XML文档中我的列表中的每个元素都收到了副本但是:

第一个元素,孩子的副本完成,我刷新我的xml文档,我看到孩子已被复制。 第二个元素,子项已被复制,但列表的第一个元素的子项已被删除。 第三个元素,子被复制但是列表的第二个元素的子元素已被删除。

等等......

例如,这里是迭代到达i = 1时的xml文档的简化视图:

<ItemParent id="1492"></ItemParent>
<ItemParent id="1492">
  <ItemChild id="1492"></ItemParent>
<ItemParent id="1492">
<ItemParent id="1492">

你可以在这里看到,我的孩子已经被删除了第一个ItemParent。

我不明白为什么在每次迭代't'中,删除了在itérération't-1'中复制的子项。特别是当我在每次迭代时使用“doc.Save(sourceFile)”保存我的xml文档时。

感谢。

1 个答案:

答案 0 :(得分:0)

这就是像AppendChild这样的DOM方法的工作方式,如果参数位于树的某个位置,它就会移动而不是克隆。所以你必须确保你做到

nodeList[i].AppendChild(nodeToCopy.Clone());

确保为节点列表中的每个项目插入新副本。