首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Linq-to-XML查询XML文档

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

Stack Overflow用户
提问于 2012-06-21 21:12:54
回答 2查看 2.4K关注 0票数 1

我有以下XML:

代码语言:javascript
运行
复制
<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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-21 21:22:44

我不能重复你的问题。在修复了XML以便标记匹配之后,这样做是可行的:

代码语言:javascript
运行
复制
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
    }    
}

或者是为了得到这些信息:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2012-06-21 21:27:14

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

代码语言:javascript
运行
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11146848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档