无法使用 foreach 获取 XML 值

Can't get XML values using foreach

提问人:Laszlo 提问时间:11/20/2017 最后编辑:jsanalyticsLaszlo 更新时间:11/20/2017 访问量:215

问:

我想使用 foreach 获取 subdata 和 subdata2 值,但由于某种原因,我得到了一个空引用异常。

XML格式:

<project>
<name>Name1</name>
<data>
    <subdata>1</subdata>
    <subdata2>1</subdata2>
</data>
<data>
    <subdata>3</subdata>
    <subdata2>2</subdata2>
</data>
</project>

法典:

XmlNode datanode = doc.DocumentElement.SelectSingleNode("/project/data");
XmlNode innerDataNode;
foreach (XmlNode dataVar in datanode)
{
    innerDataNode = datanode.SelectSingleNode("/subdata");
    int subdataVal = XmlConvert.ToInt16(innerDataNode.InnerText);
    //(...)
}

例外:

System.NullReferenceException: '对象引用未设置为 对象的实例。innerDataNode 为 null。

我做错了什么?

C# XML NullReferenceException

评论


答:

5赞 Kent Kostelac 11/20/2017 #1

您不是在节点的当前上下文中搜索。区别只是一个点。所以

innerDataNode = datanode.SelectSingleNode("/subdata");

应该是:

innerDataNode = datanode.SelectSingleNode("./subdata");

这是一个小错误,发生在我们很多人身上。但这似乎并不是你唯一的错误:

XmlNode datanode = doc.DocumentElement.SelectSingleNode("/project/data");

只给你一个数据节点,从你的其余代码来看,你想要所有的数据节点。所以你必须这样做:

XmlNodeList datanodes = doc.DocumentElement.SelectNodes("/project/data");

现在你的foreach循环是正确的,但你一直选择datanode而不是你应该循环的变量(dataVar)。

XmlNode innerDataNode;
foreach (XmlNode dataVar in datanodes)
{
    innerDataNode = dataVar.SelectSingleNode("./subdata");
    Console.WriteLine(innerDataNode.InnerText);
}