1

次の 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ました。私はそれが正しくないと確信しています。

どのようにイベントをクエリしてから、各イベントのidlocalTime、およびを取得するために繰り返しutcTimeますか?

4

2 に答える 2

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-要素内の形式によって異なります。

于 2012-06-21T21:22:44.100 に答える
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
}
于 2012-06-21T21:27:14.657 に答える