使用XElement解析XML“对象引用未设置为对象的实例”

时间:2011-11-15 05:53:31

标签: c#

已修订:我在一个更简单的帖子中重述了这个问题,并且得到了完美的回答。另一个线程是: 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);
            };

This is the error in VS

<?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>

3 个答案:

答案 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节点可用。