2011-05-13 56 views
0

我有XML的該位選擇使用多個孩子在where子句中的LINQ對XML

<status complete="false"> 
    <messages> 
    <message>Message 1</message> 
    <message>Message 2</message> 
    <message>Message 3</message> 
    </messages> 
</status> 

它看起來像這樣的時候有沒有消息

<status complete="false"> 
    <messages/> 
</status> 

,或者也可以是這樣的

<status complete="false"> 
    <messages> 
    <message/> 
    </messages> 
</status> 

我希望能夠解析消息(「消息1」,「消息2」和「消息3」),如果它們可用但我遇到了一些麻煩,我只能得到第一條消息。這是我使用的C#位:

var feeds = from feed in xmlDoc.Descendants("messages") 
      where (feed.Element("message") != null) 
      select new 
      { 
       Message = feed.Element("message").Value 
      }; 

foreach (var feed in feeds) 
{ 
    Debug.WriteLine("Found a message"); 
} 

可以在任何.NET忍者,請告訴我,我做什麼樣的noobie錯誤的。任何幫助將不勝感激。

乾杯

路易斯

+0

請問您的XML文檔包含命名空間? – 2011-05-13 11:55:17

+0

不,我沒有名稱空間。 – LCL 2011-05-13 12:09:17

回答

1

您的查詢太複雜,試試這個:

var feeds = from feed in doc.Descendants("message") 
select new 
{ 
    Message = feed.Value 
}; 
+0

這工作得很好,看起來比上面更簡單,王牌。謝謝。 – LCL 2011-05-13 12:10:30

1

我認爲這將這樣的伎倆

var feeds = from feed in xmlDoc.Descendants("message") 
      where feed.IsEmpty == false 
      select feed; 
+0

這工作得很好,謝謝。 – LCL 2011-05-13 12:09:58