2010-10-06 224 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