C# 根据条件从xmlnodelist中删除xmlnode
我有以下xmlnodelist,在这里提取以nameC# 根据条件从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
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]