如何计算已读入字符串的XML中的节点

时间:2011-09-27 21:26:44

标签: c# xml linq linq-to-xml nodes

我确信解决方案对经验丰富的人来说是微不足道的,但这不是我的意思。我已将XML文件读入字符串strSiteList。这是XML的简短示例:

<siteList>
  <site code="s0000001">
    <nameEn>Edmonton</nameEn>
    <provinceCode>AB</provinceCode>
  </site>
  <site code="s0000002">
    <nameEn>Vancouver</nameEn>
    <provinceCode>BC</provinceCode>
  </site>
</siteList>

如何计算网站出现的次数? 我从这开始:

XDocument loaded = XDocument.Parse(strSiteList);
int sitesCount = loaded.Nodes().Count(d => "some code that should work...arg...";

但我不知道这是否是正确的开始方式。

谢谢!

3 个答案:

答案 0 :(得分:5)

特定网站?这听起来像是:

string site = "s0000002";
XDocument loaded = XDocument.Parse(xml);
int sitesCount = loaded.Descendants("site")
                       .Count(x => (string) x.Attribute("code") == site);

对于所有网站,只需:

int sitesCount = loaded.Descendants("site").Count();

答案 1 :(得分:1)

您可以使用简单的XPath表达式(需要使用“System.Xml.XPath”):

XDocument loaded = XDocument.Parse(xml);
int sitesCount = loaded.XPathSelectElements("siteList/site").Count();

答案 2 :(得分:0)

假设它已被正确读取,您应该能够这样做:

int sitesCount = loaded.Descendants("site").Where(x => x.Attribute("code").Value == "1234").Count();

你也可以这样做:

int sitesCount = loaded.Descendants("site").Count(x => x.Attribute("code").Value == "1234");

如果您正在寻找所有网站的计数,您可以这样做:

int sitesCount = loaded.Descendants("site").Count();