【问题标题】:Querying an XML document using Linq-to-XML使用 Linq-to-XML 查询 XML 文档
【发布时间】:2012-06-21 21:12:54
【问题描述】:

我有以下 XML 架构:

<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

【问题讨论】:

    标签: c# linq-to-xml


    【解决方案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 - 这取决于您元素中的格式。

    【讨论】:

      【解决方案2】:

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

      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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多