2011-09-27 50 views
0

我确信解决方案对于有经验的人来说相当微不足道,但这不适用于我。我已经将一个XML文件读入一个字符串strSiteList。这里是一个简短的XML示例:如何计算已读入字符串的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..."; 

但我失去了它是否是开始这个​​或不正确的做法。

谢谢!

+0

这是你用的C#吗?你为什么把它看作一个字符串? C#有很多更好的方式来表示内存中的XML文档,然后你可以简单地使用LINQ来提取你想要的任何信息! – FailedDev

+0

@FailedDev:他已经将它解析为LINQ to XML。这并不像他试图用正则表达式来做...现在是的,使用'XDocument.Load'可能会更有意义,但这与他如何进行搜索无关。 –

+0

@JonSkeet对不起,我没有通读或测试它。我虽然他把它存入一个字符串。 – FailedDev

回答

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(); 
+0

谢谢,它是为所有网站。这是相当微不足道的。 – Doug

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(); 
1

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

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