0

c# を使用して HttpWebrequest を実行しています。次の応答が得られます

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Siri version="1.0" xmlns="http://www.siri.org.uk/">
  <ServiceDelivery>
    <ResponseTimestamp>2013-03-21T11:40:13.514Z</ResponseTimestamp>
    <StopMonitoringDelivery version="1.0">
      <ResponseTimestamp>2013-03-21T11:40:13.514Z</ResponseTimestamp>
      <RequestMessageRef>12345</RequestMessageRef>
      <MonitoredStopVisit>
        <RecordedAtTime>2013-03-21T11:40:13.514Z</RecordedAtTime>
        <MonitoringRef>020035811</MonitoringRef>
        <MonitoredVehicleJourney>
          <FramedVehicleJourneyRef>
            <DataFrameRef>-</DataFrameRef>
            <DatedVehicleJourneyRef>-</DatedVehicleJourneyRef>
          </FramedVehicleJourneyRef>
          <VehicleMode>bus</VehicleMode>
          <PublishedLineName>1</PublishedLineName>
          <DirectionName>Kempston</DirectionName>
          <OperatorRef>STB</OperatorRef>
          <MonitoredCall>
            <AimedDepartureTime>2013-03-21T11:41:00.000Z</AimedDepartureTime>
            <ExpectedDepartureTime>2013-03-21T11:44:27.000Z</ExpectedDepartureTime>
          </MonitoredCall>
        </MonitoredVehicleJourney>
      </MonitoredStopVisit>
    </StopMonitoringDelivery>
  </ServiceDelivery>
</Siri>

この応答は、「ResponseFromServer」という文字列変数に保存されます。リストボックスに「ExpectedDepartureTime」を表示したいだけです

私は次のコードでこれをやろうとしました:

//XMLResponse put in documentRoot
            XDocument documentRoot = XDocument.Parse(responseFromServer);

            //Linq To XML
            var documents =
            (from docs in documentRoot.Descendants("ServiceDelivery").Descendants("StopMonitoringDelivery").Descendants("MonitoredStopVisit").Descendants("MonitoredVehicleJourney").Descendants("MonitoredCall")
             select new
             {
                 dep = docs.Element("ExpectedDepartureTime").Value
             });
            //Show every ExpectedDepartureTime
            foreach (var i in documents)
            {
            lstHours.Items.Add(i);

                MessageBox.Show(i.ToString());
            }

これを試しても何も起こりません(メッセージボックスが表示されず、リストボックスに何も表示されません)。また、最初にタグを子孫にしようとしましたが、成功しませんでした...

誰でもこの問題で私を助けることができますか?

ありがとう!

4

1 に答える 1

1

このように名前空間を指定してから、1 つのメソッドを使用する必要がありますDescendants

XNamespace ns = "http://www.siri.org.uk/";

var documents = 
         documentRoot.Descendants(ns + "MonitoredCall")
                     .Select(x => x.Element(ns + "ExpectedDepartureTime").Value);

今、あなたはすることができます

foreach (var i in documents)
{
      lstHours.Items.Add(i);

      MessageBox.Show(i.ToString());
}

版画

2013-03-21T11:44:27.000Z
于 2013-03-21T16:11:25.940 に答える