2011-09-27 51 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();