我遇到了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文档时。
感谢。
答案 0 :(得分:0)
这就是像AppendChild
这样的DOM方法的工作方式,如果参数位于树的某个位置,它就会移动而不是克隆。所以你必须确保你做到
nodeList[i].AppendChild(nodeToCopy.Clone());
确保为节点列表中的每个项目插入新副本。