c # Разбор проблемы с XML - PullRequest
       1

c # Разбор проблемы с XML

1 голос
/ 04 октября 2011

Я использую этот код, чтобы попытаться прочитать этот XML ниже, но он ничего не читает в цикле foreach и пропускает это.Спасибо.

C #

 XElement _xml;
 _xml = XElement.Parse(PostResult);
 foreach (XElement value in _xml.Elements("ServiceDelivery")
                                .Element("StopMonitoringDelivery")
                                .Elements("MonitoredStopVisit"))
          {
             StopFeed _item = new StopFeed();
             _item.A= value.Element("PublishedLineName").Value;
             _item.B = value.Element("DirectionName").Value;

              listBox1.Items.Add(_item);
           }

XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>    
<Siri version="1.0" xmlns="http://www.siri.org.uk/">
<ServiceDelivery>
    <ResponseTimestamp>2011-10-04T11:45:36.415+01:00</ResponseTimestamp>
    <ResponseMessageIdentifier>1d8bc237-2df6-43e6-af56-c750d3089eb6</ResponseMessageIdentifier>
    <StopMonitoringDelivery version="1.0">
        <ResponseTimestamp>2011-10-04T11:45:36.415+01:00</ResponseTimestamp>
        <RequestMessageRef>1</RequestMessageRef>
        <MonitoredStopVisit>
            <RecordedAtTime>2011-10-04T11:45:36.412+01:00</RecordedAtTime>
            <MonitoringRef>020035057</MonitoringRef>
            <MonitoredVehicleJourney>
                <FramedVehicleJourneyRef>
                    <DataFrameRef>-</DataFrameRef>
                    <DatedVehicleJourneyRef>-</DatedVehicleJourneyRef>
                </FramedVehicleJourneyRef>
                <VehicleMode>bus</VehicleMode>
                <PublishedLineName>28</PublishedLineName>
                <DirectionName>blahblah</DirectionName>
                <OperatorRef>153</OperatorRef>
                <MonitoredCall>
                    <AimedDepartureTime>2011-10- 04T11:48:00.000+01:00</AimedDepartureTime>
                </MonitoredCall>
            </MonitoredVehicleJourney>
        </MonitoredStopVisit>
    </StopMonitoringDelivery>
</ServiceDelivery>
</Siri>

Ответы [ 3 ]

4 голосов
/ 04 октября 2011

Я думаю, что вы забыли пространство имен.Посмотрите на XNamespace

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

foreach (XElement value in _xml.Elements(xn+ "ServiceDelivery")
                            .Element(xn+ "StopMonitoringDelivery")
                            .Elements(xn+ "MonitoredStopVisit"))
{
      ....
}
1 голос
/ 04 октября 2011

Корневым элементом является Сири.

Либо использовать:

XElement value in _xml.Root.Elements("ServiceDelivery")
                            .Element("StopMonitoringDelivery")
                            .Elements("MonitoredStopVisit"))

или

XElement value in _xml.Element("Siri")
                            .Elements("ServiceDelivery")
                            .Element("StopMonitoringDelivery")
                            .Elements("MonitoredStopVisit"))

/ B

0 голосов
/ 04 октября 2011

попробуйте _xml.Elements("//ServiceDelivery") или _xml.Elements("Siri/ServiceDelivery"), вы забыли, что ваш узел ServiceDelivery является дочерним по отношению к узлу Siri.

Или, возможно, проблема заключается в пространстве имен XML, проверьте эту страницу и посмотрите, как можно использовать XmlNamespaceManager.

...