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

本文关键字:字符串 开头 XML 子节点 其他 选择 | 更新日期: 2023-09-27 18:08:15

我用的是c#。

我从客户端得到了一个xml节点,子节点如下:

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

我想选择所有以Store &党卫军

有办法吗?

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

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

我想选择所有以"Store" &"党卫军"。

请告诉我。

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

如果您可以使用LINQ到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"));