我已经好几个小时了,但没有运气。我想问一下如何删除多个节点。
当我做单节点时,我没有任何问题但是当我添加条件"或"否则,如果它总是删除整个节点。
希望有人可以提供帮助。
这是我到目前为止所做的:
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");
答案 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");