根据条件从xmlnodelist中删除xmlnode

时间:2014-06-16 16:13:25

标签: c# xml

我有以下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]);
}

请告诉我..

1 个答案:

答案 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之后总是有一个数字。

有了这个,您的节点列表将不包含任何Store1Store2Store3个节点,并且您不需要删除任何内容。