XmlNode.RemoveChild()方法无法按预期工作

时间:2011-07-05 07:22:57

标签: c# xml

我试图通过循环遍历xml文档中的特定节点。这是我尝试过的:

foreach (XmlNode node in doc.ChildNodes) {
    if (node.Name == "EmbeddedResource" && node.Attributes["Include"].Value.Contains(".resx")) {
           node.ParentNode.RemoveChild(node);
     }
}

执行此代码时没有任何反应。也没有例外。我用谷歌搜索了一下,用SelectSingleNode方法找到了一些解决方案,但它需要XPath作为输入参数,在我看来它太复杂了,因为我已经拥有了我想要的节点。这是它的样子(顺便说一下,我无法使它工作,因为我的XPath有问题):

parentNode.RemoveChild(parentNode.SelectSingleNode("//" + parentNode.Name + "/" + node.Name + "[@Include='" + node.Attributes["Include"].Value + "']"));

为什么这种方法表现得像这样? 有没有办法以不同的方式做到这一点?

谢谢是提前

1 个答案:

答案 0 :(得分:1)

由于您正在迭代doc.ChildNodes,为什么不使用doc.RemoveChild(节点)?

此外,可能存在一个问题,即您在从列表中删除项目时迭代列表 - 我不知道C#将如何处理。例如,您可以在原始foreach中存储要删除的临时节点列表,然后遍历临时列表以从文档中删除项目。