选择以字符串或其他字符串开头的所有xml子节点

时间:2014-06-12 13:45:51

标签: c# .net xml visual-studio-2010 xmldocument

我正在使用C#。

我从外部客户端获得了一个带有子节点的xml节点,如下所示:

<PriceID>32</PriceID>
<Store_1> 344</Store_1>
      <Store_32> 343 </Store_32>
       <SS> 54</SS>

我想选择以商店&amp;开头的所有节点的 SS

我有办法吗?

我知道有一种方法可以选择以Store开头的节点:

   list = el.SelectNodes(@"node()[starts-with(name(), 'Store')]");

我想选择以“Store”开头的所有节点&amp; “SS”。

请告诉我。

1 个答案:

答案 0 :(得分:1)

如果您可以使用LINQ to XML,那很简单:

var results = doc.Descendants()
                 .Where(x => x.Name.LocalName.StartsWith("Store") || 
                             x.Name.LocalName.StartsWith("SS"));

使用XmlDocument会更难,因为没有Descendants()DescendantsAndSelf的直接等价物。您可以编写自己的扩展方法:

// I'm assuming we don't mind too much about the ordering...
public static IEnumerable<XmlElement> DescendantsAndSelf(this XmlElement node)
{
    return new[] { node }.Concat(node.ChildNodes
                                     .OfType<XmlElement>()
                                     .SelectMany(x => x.DescendantsAndSelf()));
}

然后你可以使用:

var results = doc.DocumentElement.DescendantsAndSelf()
                 .Where(x => x.LocalName.StartsWith("Store") || 
                             x.LocalName.StartsWith("SS"));
相关问题