提取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;

但在这一行,它抛出了异常"对象引用未设置为对象实例"。

请告诉我哪里出了问题。

提取xdocument中节点的值时发生异常

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);
                                    }
                                }
                            }