1

我有一个来自我的 php 站点的 xml 文件作为 api。

这是从我的 php 应用程序返回的 xml。

<xml>
<overzicht>
<item>
<sessieID>6</sessieID>
<onderwerp>Vrijwilligers, een uitstervend rasnn</onderwerp>
<omschrijving>Ode aan de vrijwilligers jjj</omschrijving>
<sprekerID>1</sprekerID>
<lokaalID>20</lokaalID>
<themaID>1</themaID>
<typeID>2</typeID>
<periodeID>2</periodeID>
<datum>2012-02-20</datum>
<maximaleInschrijvingen>1</maximaleInschrijvingen>
<spreker>
    <sprekerID>1</sprekerID>
    <sprekerNaam>Rik Torfs</sprekerNaam>
    <loginID>13</loginID>
</spreker>
<lokaal>
    <lokaalID>20</lokaalID>
    <campusNaam>Malle</campusNaam>
    <lokaalOpCampus>W10</lokaalOpCampus>
    <typeID>2</typeID>
</lokaal>
</item>
<item>
<sessieID>15</sessieID>
<onderwerp>VPKB</onderwerp>
<omschrijving/>
<sprekerID>6</sprekerID>
<lokaalID>2</lokaalID>
<themaID>1</themaID>
<typeID>1</typeID>
<periodeID>2</periodeID>
<datum>2012-02-20</datum>
<maximaleInschrijvingen>50</maximaleInschrijvingen>
<spreker>
    <sprekerID>6</sprekerID>
    <sprekerNaam>Dick Wursten</sprekerNaam>
    <loginID>18</loginID>
</spreker>
<lokaal>
    <lokaalID>2</lokaalID>
    <campusNaam>KHK Vorselaar</campusNaam>
    <lokaalOpCampus>A102</lokaalOpCampus>
    <typeID>1</typeID>
</lokaal>
</item>
...
</overzicht>
</xml>

这是我的 C# 代码。我想获取 Sessie 的所有列表。

XDocument xmlDoc = XDocument.Parse(e.Result);
List<Sessie> sessies = 
    (
        from item in xmlDoc.Descendants("overzicht")
        select new Sessie(
                item.Element("onderwerp").Value,
                Convert.ToInt32(item.Element("sessieID").Value),
                item.Element("omschrijving").Value,
                (Spreker)(
                            new Spreker(
                                Convert.ToInt32(item.Element("spreker").Element("sprekerID").Value), 
                                item.Element("spreker").Element("sprekernaam").Value)
                        ),
                Convert.ToDateTime(item.Element("datum").Value),
                Convert.ToInt32(item.Element("maximaleInschrijvingen").Value),
                (Lokaal)(
                            new Lokaal(
                                Convert.ToInt32(item.Element("lokaal").Element("lokaalID").Value), 
                                item.Element("lokaal").Element("campusNaam").Value, 
                                item.Element("lokaal").Element("lokaalOpCampus").Value)
                        )
                )
    ).ToList<Sessie>();

我知道我的代码不适用于此异常。

“空引用异常”

4

2 回答 2

3

有一个相当明显的问题开始。查看查询的开头:

from item in xmlDoc.Descendants("overzicht")
select new Sessie(item.Element("onderwerp").Value,
...

只有在<onderwerp>直接位于<overzicht>. 没有——它在<item>元素之下。也许(给定范围变量名称)您的意思是:

from item in xmlDoc.Descendants("item")
select new Sessie(item.Element("onderwerp").Value,
...
于 2012-04-27T08:49:40.177 回答
2

查询

 from item in xmlDoc.Descendants("overzicht")

将返回一个<overzicht>元素列表。item.Element("onderwerp")不存在,您缺少<item>介于两者之间的元素。

简单修复:

 from item in xmlDoc.Descendants("item")
于 2012-04-27T08:51:51.527 回答