2011-10-04 84 views
1

我正在使用此代码尝试阅读下面的这个XML,但它不会在foreach循环中读取任何内容并跳过该内容。谢谢。c#解析XML问题

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> 
+0

您是否尝试过加入'.Elements( “Siri的”)''之前 “ServiceDelivery”' – user807566

+0

是的,我试图没有成功。 –

回答

4

我想你忘记了命名空间。看看XNamespace

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

foreach (XElement value in _xml.Elements(xn+ "ServiceDelivery") 
          .Element(xn+ "StopMonitoringDelivery") 
          .Elements(xn+ "MonitoredStopVisit")) 
{ 
     .... 
} 
+0

它不以这种方式工作 - “XmlNamespaceManager”是处理xml命名空间的解决方案(http://blog.stevex.net/xpath-and-xml-namespaces/) –

+0

@KarelFrajtak。你错了。这是Linq XML http://msdn.microsoft.com/en-us/library/system.xml.linq.xnamespace.aspx – Ray

+0

啊,抱歉,投票了。 –

0

尝试_xml.Elements("//ServiceDelivery")_xml.Elements("Siri/ServiceDelivery"),你忘了你的ServiceDelivery节点是Siri节点的孩子。

或者XML命名空间可能是问题,请检查此page并查看如何使用XmlNamespaceManager

1

根元素是Siri。

要么使用:

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

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

/B