我有以下xmlnodelist,其中我提取所有以名称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]);
}
请告诉我..
答案 0 :(得分:0)
您可以在XPath表达式中执行此操作,不选择节点(而不是稍后删除它们):
node()[starts-with(name(), 'Store') and name()!='Store1' and name()!='Store2' and name()!='Store3']
并在您的代码中使用它:
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
开始计算,Store
之后总是有一个数字。
有了这个,您的节点列表将不包含任何Store1
,Store2
或Store3
个节点,并且您不需要删除任何内容。