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