【问题标题】:count nodes with attribute value计算具有属性值的节点
【发布时间】:2015-11-22 22:19:47
【问题描述】:

我正在尝试从 XmlDocument 切换到 Linq,并且正在努力获得我想要的东西。

我有类似的 XML,

<root>
<Surfer Status='5'>
    <Name>Billy</Name>
    <County>Cornwall</County>
</Surfer>
<Surfer Status='5'>
    <Name>Tim</Name>
    <County>Cornwall</County>
</Surfer>
<Surfer Status='10'>
    <Name>Ryan</Name>
    <County>Devon</County>
</Surfer>
</root>

我可以这样算所有的冲浪者。

XDocument X = XDocument.Load("Surfers.xml");
int Total = X.Descendants("Surfer").Count();

我希望像这样统计所有状态为 5 的冲浪者

int fives = X.Descendants["Surfer[@Status='5']").Count();

但它不起作用!

【问题讨论】:

  • it doesn't work 是什么意思?您收到错误消息吗?还是您根本没有得到预期的结果?

标签: c# .net linq linq-to-xml


【解决方案1】:

您可以使用带有谓词的Count 重载

int fives = X.Descendants("Surfer").Count(x => x.Attribute("Status")?.Value == "5");

x.Attribute("Status") 将从Surfer 元素中检索Status 属性,如果Surfer 元素中的任何一个不具有Status 属性,?. 运算符将阻止NullReferenceException。

【讨论】:

    【解决方案2】:

    使用Where:

    int fives = X.Descendants("Surfer").Where(s => (int)s.Attribute("Status") == 5).Count();
    

    或者如果你真的想使用 XPath 表达式,你可以在添加 using System.Xml.XPath 并使用 XPathSelectElements 之后进行:

    int fives = X.XPathSelectElements("Surfer[@Status='5']").Count();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 2023-03-15
      • 2010-12-16
      • 2011-10-05
      相关资源
      最近更新 更多