1

我有以下 XML 架构:

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

给定一个XDocumentxDoc在这种情况下称为),我可以通过以下方式获取根:var root = xDoc.Root;

我试图var events = xDoc.Descendants("EventSet").Descendants("Event");查询 中的所有事件EventSet,但它返回了null. 我很确定这是不对的。

我将如何查询事件,然后遍历以获取每个事件的idlocalTimeutcTime

4

2 回答 2

1

我无法重现您的问题。修复了 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- 这取决于元素中的格式。

于 2012-06-21T21:22:44.100 回答
0

你可以简单地做一个这样的查询

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
}
于 2012-06-21T21:27:14.657 回答