使用 xml 的 linq 中的 where 子句选择多个子项

本文关键字:选择 子句 where xml linq 中的 使用 | 更新日期: 2023-09-27 17:56:33

我有一点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忍者都可以告诉我我犯了什么样的菜鸟错误。任何帮助将不胜感激。

干杯

路易斯

使用 xml 的 linq 中的 where 子句选择多个子项

您的查询太复杂了,请尝试以下操作:

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

我认为这样可以解决问题

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