提取xdocument中节点的值时发生异常
本文关键字:异常 xdocument 节点 提取 | 更新日期: 2023-09-27 18:28:56
我有一个类似xml的:
<RunResult>
<PreviewRecords></PreviewRecords>
<RecordsProcessed>100</RecordsProcessed>
<LogError>false</LogError>
</RunResult>
我正在使用以下命令来获取节点RecordsProcessed
、的值
int NofRecords = 0;
NofRecords = Convert.ToInt32(xdRunResultDoc.Root.Element("RunResult").Element("RecordsProcessed").Value;
但在这一行,它抛出了异常"对象引用未设置为对象实例"。
请告诉我哪里出了问题。
xdRunResultDoc.Root
已经指向<RunRdesult>
元素,因此不必再次调用Element("RunResult")
。
我建议在XElement
上使用(int)
铸造而不是Convert.ToInt32
:XElement Explicit Conversion (XElement to Int32)
int NofRecords = (int)xdRunResultDoc.Root.Element("RecordsProcessed");
试试这个
int NofRcord = Convert.ToInt32(xdRunResultDoc.Root.Element("RecordsProcessed").Value);
有关详细信息,请参阅此链接http://msdn.microsoft.com/en-us/library/bb675196.aspx
这对我有效:
string xmlstring = @"<?xml version='1.0' encoding='utf-8'?>
<RunResult>
<PreviewRecords></PreviewRecords>
<RecordsProcessed>100</RecordsProcessed>
<LogError>false</LogError>
</RunResult>";
System.Xml.Linq.XDocument doc = XDocument.Parse(xmlstring);
int NofRecords = 0;
NofRecords = Convert.ToInt32(doc.Element("RunResult").Element("RecordsProcessed").Value);
您可以自己找到解决方案,为什么不调试并查看是哪个原因导致"对象引用未设置为对象实例"错误?
您可以在xdRunResultDoc
中添加watch,在运行时您可以检查什么是根节点,以及xdRunResultDoc.Root.Element("RunResult")
等的结果。
这里的根节点是RunResult
,在名为RunResult
的根节点中找不到元素
你最好看看这个代码项目教程。
试试这个代码
从xml文件读取整个文本并将其加载到XmlDocument
XmlNode rootNode = xDoc.SelectSingleNode("RunResult");
if (rootNode.HasChildNodes)
{
foreach (XmlNode node in rootNode.ChildNodes)
{
if (node.Name =="RecordsProcessed")
{
NofRecords=Convert.ToInt32(node.InnerText);
}
}
}