使用Linq-to-XML查询XML文档

时间:2012-06-21 21:12:55

标签: c# linq-to-xml

我有以下XML Schema:

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

鉴于XDocument(在这种情况下称为xDoc),我可以通过以下方式获取根:var root = xDoc.Root;

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

我如何查询事件,然后迭代以获取每个事件的idlocalTimeutcTime

2 个答案:

答案 0 :(得分: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 - 这取决于元素中的格式。

答案 1 :(得分: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
}