C# 使用属性值计算节点数
我正在尝试从XmlDocument切换到Linq,并且正在努力获得我想要的东西 我有类似的XMLC# 使用属性值计算节点数,c#,.net,linq,linq-to-xml,C#,.net,Linq,Linq To Xml,我正在尝试从XmlDocument切换到Linq,并且正在努力获得我想要的东西 我有类似的XML <root> <Surfer Status='5'> <Name>Billy</Name> <County>Cornwall</County> </Surfer> <Surfer Status='5'> <Name>Tim</Name> <Co
<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>
我希望能数一数所有状态为5的冲浪者
int fives = X.Descendants["Surfer[@Status='5']").Count();
但它不起作用 在以下位置使用
:
int fives = X.Descendants("Surfer").Where(s => (int)s.Attribute("Status") == 5).Count();
或者,如果您确实想使用XPath表达式,可以在使用System.Xml.XPath添加并使用XPathSelectElements
后使用:
int fives = X.XPathSelectElements("Surfer[@Status='5']").Count();
您可以使用带有谓词的Count
重载
int fives = X.Descendants("Surfer").Count(x => x.Attribute("Status")?.Value == "5");
x.Attribute(“Status”)
将从Surfer
元素和中检索Status
属性。
操作符防止NullReferenceException
如果任何Surfer
元素没有Status
属性。你所说的它不工作是什么意思?您是否收到错误消息?或者你只是没有得到预期的结果?
int fives = X.Descendants("Surfer").Count(x => x.Attribute("Status")?.Value == "5");