Las*_*zlo 3 c# xml nullreferenceexception
我想使用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>
Run Code Online (Sandbox Code Playgroud)
码:
XmlNode datanode = doc.DocumentElement.SelectSingleNode("/project/data");
XmlNode innerDataNode;
foreach (XmlNode dataVar in datanode)
{
innerDataNode = datanode.SelectSingleNode("/subdata");
int subdataVal = XmlConvert.ToInt16(innerDataNode.InnerText);
//(...)
}
Run Code Online (Sandbox Code Playgroud)
例外:
System.NullReferenceException:'对象引用未设置为对象的实例.innerDataNode为null.
我究竟做错了什么?
您不是在节点的当前上下文中搜索.差异只是一个点.所以
innerDataNode = datanode.SelectSingleNode("/subdata");
Run Code Online (Sandbox Code Playgroud)
应该:
innerDataNode = datanode.SelectSingleNode("./subdata");
Run Code Online (Sandbox Code Playgroud)
这是一个小错误,发生在我们很多人身上.但这似乎不是你唯一的错误:
XmlNode datanode = doc.DocumentElement.SelectSingleNode("/project/data");
Run Code Online (Sandbox Code Playgroud)
只给你一个datanode并根据你希望所有数据节点的其余代码来判断.所以你必须这样做:
XmlNodeList datanodes = doc.DocumentElement.SelectNodes("/project/data");
Run Code Online (Sandbox Code Playgroud)
现在你的foreach循环是正确的,但是你继续选择datanode而不是你想要循环的变量(dataVar).
XmlNode innerDataNode;
foreach (XmlNode dataVar in datanodes)
{
innerDataNode = dataVar.SelectSingleNode("./subdata");
Console.WriteLine(innerDataNode.InnerText);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |