选择要删除的多个节点

时间:2014-08-28 21:39:52

标签: c# xml

我已经好几个小时了,但没有运气。我想问一下如何删除多个节点。

当我做单节点时,我没有任何问题但是当我添加条件"或"否则,如果它总是删除整个节点。

希望有人可以提供帮助。

这是我到目前为止所做的:

XML

<ApplDetails>

<NodeLog>
<PName>
test123
</PName>
</NodeLog>

<NodeLog>
<PName>
test125
</PName>
</NodeLog>

<NodeLog>
<PName>
test126
</PName>
</NodeLog>

</ApplDetails>

c#代码

XmlDocument xdoc1 = new XmlDocument();
xdoc1.Load("D:\\nodes.xml");
foreach (XmlNode node in xdoc1.SelectNodes("ApplDetails/NodeLog"))
{

    if (node.SelectSingleNode("PName").InnerText != "test123"  || node.SelectSingleNode("PName").InnerText != "test125"   )
    {
        node.ParentNode.RemoveChild(node);
    }

}

xdoc1.Save("D:\\nodes.xml");

2 个答案:

答案 0 :(得分:0)

值不能等于test123且同时为test125,因此条件始终为true(最多一个子句可以是false - 尝试test123,您将获得'test123' != 'test123' || 'test123' != 'test125' - 第一个子句是false,但第二个是true,因此表达式的计算结果为true。如果要删除其值不是&#39; test123&#39;的所有元素。而不是&#39; test125&#39;您需要&&而不是||

答案 1 :(得分:0)

在LINQ to XML中:

var xDoc = XDocument.Load(@"D:\nodes.xml");
xDoc.Root.Elements("NodeLog")
    .Where(w => (string)w.Element("PName") == "test123" || (string)w.Element("PName") == "test125")
    .Remove();
xDoc.Save(@"D:\nodes.xml");