已修订:我在一个更简单的帖子中重述了这个问题,并且得到了完美的回答。另一个线程是: How to exclude NULL blocks from XML using LINQ-to-XML?
首先,TIA到stackoverflow社区。当我完成这个项目时,我一直住在这里。
我正在努力解析xml(我是新手)。我已经阅读了很多示例,并且正在使用此处的教程:http://www.switchonthecode.com/tutorials/introduction-to-linq-simple-xml-parsing
XML文档如下。
有什么建议吗?
ourdoc = XDocument.Parse(xml);
var arrivalAndDepartures =
from arrivalAndDeparture in ourdoc.Descendants("arrivalAndDeparture")
select new // error thrown 2nd time through this block
{
routeId = arrivalAndDeparture.Element("routeID").Value,
scheduledDepartureTime = arrivalAndDeparture.Element("scheduledDepartureTime").Value,
};
foreach ( var arrivalAndDeparture in arrivalAndDepartures )
{
Console.WriteLine("routeId: " + arrivalAndDeparture.routeId);
Console.WriteLine("scheduledDepartureTime: " + arrivalAndDeparture.scheduledDepartureTime);
};
<?xml version="1.0" encoding="UTF-8" ?>
<response>
<version>2</version>
<code>200</code>
<text>OK</text>
<data class="entryWithReferences">
<references>
<agencies>
<agency>
<id>1</id>
<privateService>false</privateService>
</agency>
<agency>
<id>29</id>
<privateService>false</privateService>
</agency>
<agency>
<id>40</id>
<name>Sound Services</name>
<privateService>false</privateService>
</agency>
</agencies>
<entry class="stopWithArrivalsAndDepartures">
<stopId>1_450</stopId>
<arrivalsAndDepartures>
<arrivalAndDeparture>
<routeId>1_7</routeId>
<scheduledDepartureTime>1321232424000</scheduledDepartureTime>
<predictedDepartureTime>1321232591000</predictedDepartureTime>
</arrivalAndDeparture>
<arrivalAndDeparture>
<routeId>1_36</routeId>
<scheduledDepartureTime>1321232424000</scheduledDepartureTime>
<predictedDepartureTime>1321232608000</predictedDepartureTime>
<tripStatus>
<activeTripId>1_18921463</activeTripId>
</tripStatus>
</arrivalAndDeparture>
<arrivalAndDeparture>
<routeId>1_14</routeId>
<scheduledDepartureTime>1321232424000</scheduledDepartureTime>
<predictedDepartureTime>1321232690000</predictedDepartureTime>
<tripStatus>
<activeTripId>1_18156836</activeTripId>
<blockTripSequence>24</blockTripSequence>
<serviceDate>1321171200000</serviceDate>
</tripStatus>
</arrivalAndDeparture>
<arrivalAndDeparture>
<routeId>1_39</routeId>
<predictedDepartureTime>1321232939000</predictedDepartureTime>
<tripStatus>
<activeTripId>1_18009961</activeTripId>
<blockTripSequence>15</blockTripSequence>
</tripStatus>
</arrivalAndDeparture>
<arrivalAndDeparture>
<routeId>1_23</routeId>
<arrivalAndDeparture>
<routeId>1_27</routeId>
<scheduledDepartureTime>1321233015000</scheduledDepartureTime>
<tripStatus>
<activeTripId>1_18086972</activeTripId>
<blockTripSequence>12</blockTripSequence>
</tripStatus>
</arrivalAndDeparture>
<arrivalAndDeparture>
<routeId>1_16</routeId>
<tripStatus>
<activeTripId>1_18009566</activeTripId>
<blockTripSequence>0</blockTripSequence>
</tripStatus>
</arrivalAndDeparture>
<arrivalAndDeparture>
<routeId>1_7</routeId>
<scheduledDepartureTime>1321233324000</scheduledDepartureTime>
<predictedDepartureTime>1321233337000</predictedDepartureTime>
<tripStatus>
<activeTripId>1_18921967</activeTripId>
<blockTripSequence>15</blockTripSequence>
</tripStatus>
</arrivalAndDeparture>
</arrivalsAndDepartures>
</entry>
</data>
</response>
答案 0 :(得分:2)
如果xml就像
<?xml version="1.0" encoding="utf-8" ?>
<arrivalAndDeparture>
</arrivalAndDeparture>
你可以得到与你的帖子相同的例外。
答案 1 :(得分:1)
似乎要么
arrivalAndDeparture.Element("routeID")
或
arrivalAndDeparture.Element("scheduledDepartureTime")
为空
答案 2 :(得分:1)
请确保您的XML中所有 routeID
个节点下的元素scheduledDepartureTime
节点和arrivalAndDeparture
节点可用。