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

C# 提取xdocument中节点的值时发生异常,c#,linq-to-xml,C#,Linq To Xml,我有一个类似于: <RunResult> <PreviewRecords></PreviewRecords> <RecordsProcessed>100</RecordsProcessed> <LogError>false</LogError> </RunResult> 但在这一行,它抛出异常“对象引用未设置为对象的实例” 请指出我的错误所在。xdRunResultDoc.Root已经指

我有一个类似于:

<RunResult>
  <PreviewRecords></PreviewRecords>
  <RecordsProcessed>100</RecordsProcessed>
  <LogError>false</LogError>
</RunResult>
但在这一行,它抛出异常“对象引用未设置为对象的实例”


请指出我的错误所在。

xdRunResultDoc.Root
已经指向
元素,因此您不必再次调用
元素(“RunResult”)

我建议使用
(int)
XElement
进行强制转换,而不是
Convert.ToInt32

试试这个

int NofRcord = Convert.ToInt32(xdRunResultDoc.Root.Element("RecordsProcessed").Value);
有关更多详细信息,请参见此链接

这对我很有用:

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);
string xmlstring=@”
100
错误的
";
System.Xml.Linq.XDocument doc=XDocument.Parse(xmlstring);
int NofRecords=0;
NofRecords=Convert.ToInt32(doc.Element(“RunResult”).Element(“RecordsProcessed”).Value);

您可以自己找到解决方案,为什么不调试并查看导致“对象引用未设置为对象实例”错误的原因

您可以将watch添加到
xdRunResultDoc
中,在运行时,您可以检查什么是根节点,以及为
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);
                                    }
                                }
                            }

通过调试代码来检查xdRunResultDoc.Root.Element(“RunResult”)的值,我认为您可以通过快速帮助解决很多问题。
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);
XmlNode rootNode = xDoc.SelectSingleNode("RunResult");
                            if (rootNode.HasChildNodes)
                            {
                                foreach (XmlNode node in rootNode.ChildNodes)
                                {
                                    if (node.Name =="RecordsProcessed")
                                    {

                                        NofRecords=Convert.ToInt32(node.InnerText);
                                    }
                                }
                            }