C# 使用Linq to XML查询XML文档

C# 使用Linq to XML查询XML文档,c#,linq-to-xml,C#,Linq To Xml,我有以下XML模式: <Root> <EventSet> <Event> <id> //random id </id> <time> <localTime> //random local time </localtime>

我有以下XML模式:

<Root>
   <EventSet>
      <Event>
         <id> 
            //random id 
         </id>
         <time>
            <localTime> 
               //random local time 
            </localtime>
            <utcTime> 
               //corresponding UTC time 
            </utcTime>
         </time>
      </Event>
   </EventSet>
</Root>

//随机id
//随机当地时间
//相应的UTC时间
给定一个
XDocument
(在本例中称为
xDoc
),我可以通过以下方式获得根:
var root=xDoc.root

我尝试了
var events=xDoc.substands(“EventSet”).substands(“Event”)
查询
事件集中的所有事件,但返回
null
。我敢肯定那是不对的


我如何查询事件,然后迭代获取每个事件的
id
localTime
,以及
utcTime

我无法重现您的问题。修复了XML,使标记匹配后,这就起作用了:

using System;
using System.Linq;
using System.Xml.Linq;

class Program
{    
    public static void Main()
    {
        var doc = XDocument.Load("Test.xml");
        var query = doc.Descendants("EventSet")
                       .Descendants("Event");
        Console.WriteLine(query.Count()); // 1
    }    
}
或者,要获取位:

foreach (var element in query)
{
    string id = (string) element.Element("id");
    string localTime = (string) element.Element("time").Element("localTime");
    string utcTime = (string) element.Element("time").Element("utcTime");
    ...
}

您可能可以转换为
DateTime
而不是
string
——这取决于元素中的格式。

我无法重现您的问题。修复了XML,使标记匹配后,这就起作用了:

using System;
using System.Linq;
using System.Xml.Linq;

class Program
{    
    public static void Main()
    {
        var doc = XDocument.Load("Test.xml");
        var query = doc.Descendants("EventSet")
                       .Descendants("Event");
        Console.WriteLine(query.Count()); // 1
    }    
}
或者,要获取位:

foreach (var element in query)
{
    string id = (string) element.Element("id");
    string localTime = (string) element.Element("time").Element("localTime");
    string utcTime = (string) element.Element("time").Element("utcTime");
    ...
}

您可以转换为
DateTime
而不是
string
——这取决于元素中的格式。

您可以简单地执行这样的查询

var events = from e in xDoc.Root.Desendants("Event") select new {
id = e.Element("id").Value
Time = e.Element("time").Element("localTime").Value ////or you can cast it into datetime
UtcTime = e.Elelemt("time").Element("utcTime").Value //or you can cast it into datetime
}

您可以简单地执行这样的查询

var events = from e in xDoc.Root.Desendants("Event") select new {
id = e.Element("id").Value
Time = e.Element("time").Element("localTime").Value ////or you can cast it into datetime
UtcTime = e.Elelemt("time").Element("utcTime").Value //or you can cast it into datetime
}