2010-10-06 221 views
1

所有節點我有一個XML文件,像這樣:使用LINQ來讀取XML

<?xml version="1.0" encoding="utf-8" ?> 
<ROOT> 
    <NAME> 
     ItemName 
    </NAME> 
    <LIST> 
     <ITEM> 
      ListItem1 
     </ITEM> 
     <ITEM> 
      ListItem2 
     </ITEM> 
     <ITEM> 
      ListItem3 
     </ITEM> 
    </LIST> 
</ROOT> 

我如何使用LINQ來獲取列表標籤內的所有項目?

回答

4

喜歡的東西:

XDocument doc = XDocument.Load("foo.xml"); 
var items = from list in doc.Descendants("LIST") 
      from item in list.Elements("ITEM") 
      select item; 

,將與多個「LIST」元素應付,並不會發現,除了直接在「LIST」一「項目」的元素。如果你不關心這些細微之處,你可以只使用:

XDocument doc = XDocument.Load("foo.xml"); 
var items = doc.Descendants("ITEM"); 
3

一個可選的語法將是鏈傳人方法專門找哪家是列表中節點的孩子的項目節點:

XDocument doc = XDocument.Load("foo.xml"); 
var nodes = doc.Descendants("LIST").Descendants("ITEM"); 
+0

我真的不會稱之爲'替代' - 它在語義上與Jon的第一個答案相同,只是使用方法鏈而不是查詢語法。 – 2010-10-06 16:06:37

+0

編輯答案以反映它是替代語法。 – 2010-10-07 08:17:28

+0

請注意,您需要'使用System.Xml.Linq;'才能獲得允許您在IEnumerables上鍊接.Descendants的擴展方法 – AaronLS 2014-04-21 20:25:37