无法使用 foreach 获取 XML 值
Can't get XML values using foreach
我想使用 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: 'Object reference not set to an
instance of an object. innerDataNode was null.
我做错了什么?
您没有在节点的当前上下文中搜索。区别只是一个点。所以
innerDataNode = datanode.SelectSingleNode("/subdata");
应该是:
innerDataNode = datanode.SelectSingleNode("./subdata");
这是一个小错误,我们很多人都会遇到。但这似乎不是你唯一的错误:
XmlNode datanode = doc.DocumentElement.SelectSingleNode("/project/data");
只给你一个数据节点,根据你剩下的代码判断你想要所有的数据节点。所以你必须这样做:
XmlNodeList datanodes = doc.DocumentElement.SelectNodes("/project/data");
现在你的 foreach 循环是正确的,但你一直选择数据节点而不是你应该循环的变量 (dataVar)。
XmlNode innerDataNode;
foreach (XmlNode dataVar in datanodes)
{
innerDataNode = dataVar.SelectSingleNode("./subdata");
Console.WriteLine(innerDataNode.InnerText);
}
我想使用 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: 'Object reference not set to an instance of an object. innerDataNode was null.
我做错了什么?
您没有在节点的当前上下文中搜索。区别只是一个点。所以
innerDataNode = datanode.SelectSingleNode("/subdata");
应该是:
innerDataNode = datanode.SelectSingleNode("./subdata");
这是一个小错误,我们很多人都会遇到。但这似乎不是你唯一的错误:
XmlNode datanode = doc.DocumentElement.SelectSingleNode("/project/data");
只给你一个数据节点,根据你剩下的代码判断你想要所有的数据节点。所以你必须这样做:
XmlNodeList datanodes = doc.DocumentElement.SelectNodes("/project/data");
现在你的 foreach 循环是正确的,但你一直选择数据节点而不是你应该循环的变量 (dataVar)。
XmlNode innerDataNode;
foreach (XmlNode dataVar in datanodes)
{
innerDataNode = dataVar.SelectSingleNode("./subdata");
Console.WriteLine(innerDataNode.InnerText);
}