C# XML 后代查询

标签 c# xml

这是我的 XML 结构,它是一个事件列表,每个事件都包含一个事件时间列表。我需要返回“TIME”值的列表,但我坚持如何获取这些值(请注意,我需要查询此列表并按“Id”过滤)

enter image description here

到目前为止的代码:

public IEnumerable<EventFeed> GetEventDatesByEventId(int eventId)
    {
        return (from feed in xmlDoc.Descendants("Event")
                where (int)feed.Element("Id") == eventId
                from ev in feed.Elements("Times")
                select new EventFeed()
                {
                    EventDate = (DateTime)ev.Element("Time")
                }).ToList().OrderByDescending(x => x.EventDate);
    }

谢谢 千字节

最佳答案

关闭,您需要选择<Times>首先节点或使用 Descendants<Time>下面是EventTime :

return (from feed in xmlDoc.Descendants("Event")
        where (int)feed.Element("Id") == eventId
        from et in feed.Element("Times").Elements("EventTime")
        select new EventFeed()
        {
            EventDate = (DateTime)et.Element("Time")
        }).ToList().OrderByDescending(x => x.EventDate);

示例:

string xml = @"<?xml version=""1.0"" ?>
<Events>
    <Event>
        <Id>542</Id>
        <Times>
            <EventTime>
                <Time>2011-11-28T14:00:00</Time>
            </EventTime>
            <EventTime>
                <Time>2011-11-30T10:00:00</Time>
            </EventTime>
            <EventTime>
                <Time>2011-11-30T09:00:00</Time>
            </EventTime>
        </Times>
    </Event>
</Events>";

int eventId = 542;
foreach (var evt in GetEvents(XDocument.Parse(xml), eventId)
{
    Console.WriteLine("{0}", evt.EventDate);
}

输出:

11/30/2011 10:00:00
11/30/2011 09:00:00
11/28/2011 14:00:00

关于C# XML 后代查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6650426/

相关文章:

c# - 如何在实际需要之前初始化 C# 静态类?

c# - 命名空间不附加到 WCF 中的 bool,除非不同于类的命名空间

需要 HTML textarea 标签帮助

python - 使用ElementTree进行XML提取解析

java - struts2 - 为什么要使用声明式验证?

java - 使用 Java DOM 设置不带前缀的属性

c# - 使用 WCF 的三层架构

c# - 已添加项目。安装 Windows 服务时出错

c# - 如何在 XDocument.Load(string uri) 上设置超时?

java - 算术异常 : Divide by zero with table layout dynamically in Android