使用linq中的where子句为xml选择多个子节点

时间:2011-05-13 11:44:08

标签: c# linq-to-xml

我有这点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错误。任何帮助将不胜感激。

干杯

路易斯

2 个答案:

答案 0 :(得分:1)

我认为这会解决问题

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

答案 1 :(得分:1)

您的查询过于复杂,请尝试以下操作:

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