我正在运行这行代码,它对我的大约800条记录执行完美。它达到了创纪录的801,我被抛出
未处理的类型' System.NullReferenceException'发生在XMLPost.exe中
附加信息:对象引用未设置为对象的实例。
这是一段麻烦的代码行,我认为在?.Value
中添加代码会占用null元素。
string sr12 = xml.Element("Parent").Element("Child1").Element("Child2").Element("Child3").Element("Child4").Element("Child5").Element("sr12")?.Value;
Console.WriteLine(sr12);
我应该为变量sr12
更改什么,以便它不会中断,我的代码可以继续按预期执行?
修改
XML结构
<parent>
<one>
<two>
<three>
<sr12></sr12>
</three>
</two>
</one>
<ten>
<eleven>
<twelve>
<thirteen>
<sr12></sr12>
</thirteen>
</twelve>
</eleven>
</ten>
</parent>
我也尝试了这种语法
var result = (string) xml.Elements("Parent")
.Elements("ten")
.Elements("eleven")
.Elements("twelve")
.Elements("thirteen")
.Elements("homeaddress")
.SingleOrDefault();
产生错误
未处理的类型&#39; System.InvalidOperationException&#39;发生在System.Core.dll中的附加信息:序列包含多个元素
答案 0 :(得分:0)
如果您的查询中的任何元素丢失,您将收到此异常。 Element
查询返回XElement
或返回null
。
您应该使用Elements
查询。这将返回与名称匹配的所有元素,并且可以以相同的方式链接。使用此方法的结果是,如果缺少任何元素,则只需获得一个空序列。
如果您最后调用SingleOrDefault
,它将返回查询返回的单个元素或null。然后,您可以使用内置的显式转换为字符串。
var result = (string) xml.Elements("Parent")
.Elements("Child1")
.Elements("Child2")
.Elements("Child3")
.Elements("Child4")
.Elements("Child5")
.Elements("sr12")
.SingleOrDefault();
或者,如果绝对路径不重要(可能sr12
仅出现在层次结构中的某个点),那么您可以使用Descendants
:
var result = (string) xml.Descendants("sr12").SingleOrDefault();