C# 根据条件从xmlnodelist中删除xmlnode

C# 根据条件从xmlnodelist中删除xmlnode,c#,xml,C#,Xml,我有以下xmlnodelist,在这里提取以nameStore开头的所有元素: XmlNodeList nodes = list[0].SelectNodes(@"node()[starts-with(name(), 'Store')]"); 这给了我输出列表 Name : Store1 , InnerXML = 100 Name : Store2 , InnerXML = 200 Name : Store3 , InnerXML = 300 Name : Store34 , Inne

我有以下xmlnodelist,在这里提取以name
Store
开头的所有元素:

XmlNodeList nodes = list[0].SelectNodes(@"node()[starts-with(name(), 'Store')]");
这给了我输出列表

Name : Store1  , InnerXML = 100
Name : Store2  , InnerXML = 200
Name : Store3  , InnerXML = 300
Name : Store34  , InnerXML = 40
Name : Store42  , InnerXML = 40
现在,我想从节点列表中删除所有不是
Store1、Store2和Store3
的存储。有什么办法我能做到吗

for (int i = nodes.Count - 1; i >= 0; i--)
{
if (nodes[i].Name != "Store1" || nodes[i].Name != "Store2" || nodes[i].Name != "Store3")
nodes.RemoveChild(nodes[i]);
}

请让我知道

您可以在XPath表达式中执行此操作,而不选择节点(而不是稍后删除节点):

并在代码中使用它:

XmlNodeList nodes = 
    list[0].SelectNodes(@"node()[starts-with(name(), 'Store') and name()!='Store1' and name()!='Store2' and name()!='Store3']");
甚至

node()[starts-with(name(), 'Store') and number(substring-after(name(), 'Store')) > 3]
如果从
1
开始计数,并且
存储后始终有一个数字


这样,您的节点列表将不包含任何
Store1
Store2
Store3
节点,并且不需要删除任何内容。

旁注:请避免并尝试在不进行水平滚动的情况下格式化代码。我尝试了使用您上面提到的xpath表达式:XmlNodeList nodes=list[0]。选择节点(@“node()[以(name(),'Store')和.!='Store1'和.!='Store2'和.!='Store3']”开头。我看不出此表达式在Store1、Store2和Store3中出现任何错误。谢谢!但是最后一个表达式,在
之后使用
子字符串,应该可以正常工作,不会有任何更改。
node()[starts-with(name(), 'Store') and number(substring-after(name(), 'Store')) > 3]