C# 使用Linq to XML查询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>
<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
}