2010-08-24 79 views
0

我有一個XML文件,如下所示:需要一個嵌套的LINQ to XML查詢幫助

<?xml version="1.0" encoding="utf-8" ?> 

<publisher> 
<name>abc</name> 
<link>http://</link> 
<description>xyz</description> 

<category title="Top"> 
<item> 
<title>abc</title> 
<link>http://</link> 
<pubDate>1</pubDate> 
<description>abc</description> 
</item> 

<item> 
<title>abc</title> 
<link>http://</link> 
<pubDate>2</pubDate> 
<description>abc</description> 
</item> 


</category> 

<category title="Top2"> 
<item> 
<title>abc</title> 
<link>http://</link> 
<pubDate>1</pubDate> 
<description>abc</description> 
</item> 

<item> 
<title>abc</title> 
<link>http://</link> 
<pubDate>2</pubDate> 
<description>abc</description> 
</item> 
</category> 

</publisher> 

我需要一個LINQ寫在C#中的XML查詢了基於價值下一個「類」標籤返回的一切提供的屬性。我已經嘗試了下面的代碼,但它給了我錯誤。任何幫助將不勝感激:

 System.Xml.Linq.XElement xml = System.Xml.Linq.XElement.Parse(e.Result); 

     IEnumerable<string> items = from category in xml.Elements("category") 
        where category.Attribute("title").Value == "Top" 
        select category.ToString(); 
+0

我幾乎可以肯定的是選擇應來之前。無論如何,請粘貼錯誤。 – 2010-08-24 00:50:23

+0

「SELECT before WHERE」只有SQL規則,而不是LINQ。錯誤描述將​​有很大幫助。對於我來說,目前還不清楚爲什麼在沒有「Top」值的標題時搜索「Top」。更多的源代碼也可能是成功的。 – Budda 2010-08-24 01:01:19

+0

@Hamish @Budda:謝謝你的迴應。這就是查詢執行後在「項目」中返回的內容: System.Collections.Generic.IEnumerator .Current ='System.Collections.Generic.IEnumerable '不包含'System'的定義,並且沒有擴展方法'系統'接受類型'System.Collections.Generic.IEnumerable '類型的第一個參數可以找到(你是否缺少一個使用directiv ... 我想要的是所有的標籤返回取決於例如「Top」,「Top2」 – Taimi 2010-08-24 01:07:25

回答

1
IEnumerable<string> items = from category in xml.Descendants("category") 
    where category.Attribute("title").Value == "Top" 
    select category.ToString(); 

當然,那將會給你在這一個字符串列表。如果你只想在字符串中它:

var items = (from category in xml.Descendants("category") 
      where category.Attribute("title").Value == "Top" 
      select category.ToString()).First(); 

但是,如果你想繼續處理XML,你可能真的想它作爲一個的XElement對象:

var items = (from category in xml.Descendants("category") 
      where category.Attribute("title").Value == "Top" 
      select category).First(); 
+0

感謝James !!上面發佈的第三個查詢是我正在尋找的內容,它像一個魅力一樣工作!謝謝! – Taimi 2010-08-24 01:15:35