2009-09-17 78 views
7

選擇XML後代,我有以下XML結構:C# - 使用LINQ

<row> 
    <field name="Id">1</field> 
    <field name="AreaId">1</field> 
    <field name="Name">ת&quot;א</field> 
</row> 
<row> 
    <field name="Id">2</field> 
    <field name="AreaId">4</field> 
    <field name="Name">אבטליון</field> 
</row> 

我想遍歷使用LINQ的name節點。 我嘗試這樣做:

var items = (from i in doc.Descendants("row") 
        select new 
        { 
         Text = i.Value 

        }).ToList(); 

但它沒有工作,我需要它的方式。有什麼建議麼?

回答

14
var items = doc.Descendants("field") 
       .Where(node => (string)node.Attribute("name") == "Name") 
       .Select(node => node.Value.ToString()) 
       .ToList(); 
10

首先,確保你的XML有一個根節點:

<rows> 
<row> 
    <field name="Id">1</field> 
    <field name="AreaId">1</field> 
    <field name="Name">ת&quot;א</field> 
</row> 
<row> 
    <field name="Id">2</field> 
    <field name="AreaId">4</field> 
    <field name="Name">אבטליון</field> 
</row> 
</rows> 

之後,你可以使用下面的代碼加載XML:

string xml = //Get your XML here  
XElement xElement = XElement.Parse(xml); 
//This now holds the set of all elements named field 
var items = 
     xElement 
     .Descendants("field") 
     .Where(n => (string)n.Attribute("name") == "Name"); 
+2

ray,you are 我的最愛。大起大落。 – RhysC 2011-11-16 11:19:48

1

我想Linq to Sql是最直接的方法:

var items = (from c in doc.Descendants("field") 
      where c.Attribute("name").Value == "Name" 
      select c.Value 
      ).ToList(); 
+7

這是「查詢理解語法」,而不是Linq-to-sql :) – 2011-11-16 11:19:06

+0

「你讓我在ToList()」 – RhysC 2011-11-16 11:19:15