2014-10-04 161 views
0

我使用Visual Studio 2013,C#...嘗試選擇由子元素元素

我有這樣的XML變量 'myXml':

<root> 
<article><title>A1</title><category><title>Geography</title></category></article> 
<article><title>A2</title><category><title>History</title></category></article> 
<article><title>A3</title><category><title>Geography</title></category></article> 
<article><title>A4</title><category><title>Finance</title></category></article> 
</root> 

我怎樣才能檢索到每個具有使用LINQ2XML作爲lambda或plain LINQ查詢的「Finance」類別標題?

我有這個LINQ查詢不工作:

var doc = XDocument.Parse(myXml); 

var l = (from d in doc.Elements("root").Elements("article") 
        where d.Elements("category").Elements("title").Equals("Finance") 
        select d); 
+0

不幸的是,這仍然無法正常工作。 – 2014-10-04 15:34:21

+0

名稱?而不是標題。等一下,我正在努力完成它。 – W92 2014-10-04 15:34:56

回答

0

做到這一點,它工作正常:

 var query = from article in doc.Descendants("article") 
        where ((string)article.Element("category").Element("title").Value == "Finance") 
        select article; 

的方法Equals不是用於通過您的參數與其他對象進行比較。請看看這裏: Distinct not working with LINQ to Objects

0

我相信這應該爲你

var l = from att in XDocument.Parse(myXml) 
       .Element("root") 
       .Elements("article") 
       .Elements("category") 
       .Where(x => x.Value == "Finance") 
       select att; 
1

簡單的XPath的解決方案將是

var l = doc.XPathSelectElements("/root/article[category/title/text() = \"Finance\"]"); 

Alernatively,

var l = (from d in elem.Element("root") 
      .Elements("article") 
      .Elements("category") 
      .Elements("title") 
      .Where(x => x.Value == "Finance") 
      select d.Parent.Parent);