我有以下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
。 我很确定这不对。
我如何查询事件,然后迭代以获取每个事件的id
,localTime
和utcTime
?
答案 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
}