尝试获取可能不存在的子树下的 xml 标记的值时,我遇到了 nullexception 问题。
扩展处理程序在无法在现有子树上找到标记时工作得很好,但在查找不存在的子树中的标记时似乎无法处理。
在这种情况下,子树是 summaryData,它可能存在也可能不存在,并且尝试获取 addressLine1 是它无法处理的地方null
,我得到了错误
System.NullReferenceException 发生,Message=Object 引用未设置为对象的实例。
这是 xml,为了清楚起见,删减了,但结构是正确的:
<record>
<accounts>
<account >
</account >
</accounts>
<summaryData>
<Date>2013-02-04</Date>
<address >
<city>Little Rock</city>
<postalCode>00000</postalCode>
<state>AR</state>
<addressLine1>Frank St</addressLine1>
</serviceAddress>
</summaryData>
</record>
我的 C# 代码是:
xmlDoc.Descendants("account")
//select (string)c.Element("account") ;
select new
{
//this works fine
Stuffinxml = c.Element("stuffinxml").Value,
//this field may not be there, but the handler handlers the exception correctly here when it as the correct root (account)
otherstuff = CustXmlHelp.GetElementValue(mR.Element("otherstuff")),
//this is the problem, where the summaryData root does not exist (or moved somewhere else)
street_address = GetElementValue(c.Element("summaryData").Element("serviceAddress").Element("addressLine1"))
};
我处理 null 的扩展方法是:
public static string GetElementValue(this XElement element)
{
if (element != null)
{
return element.Value;
}
else
{
return string.Empty;
}
}
任何帮助将不胜感激,因为我不明白为什么当子树不存在时它会失败。