让我说我期待XML如下,我正在尝试在第3层中提取数据:
<Layer1>
<Layer2>
<Layer3>Test</Layer3>
</Layer2>
</Layer1>
C#:
var data = doc.Element("Layer1").Element("Layer2").Element("Layer3");
如果缺少layer1或layer2元素,则会导致null异常。我一直用try / catch包装这些查询,并在catch块中默认变量,但这种方法闻起来。如果缺少任何图层,是否有更好的方法将“data”变量设置为null?
答案 0 :(得分:4)
var data = doc.Elements("Layer1").Elements("Layer2").Elements("Layer3").SingleOrDefault();
请注意使用元素* s * 。
IEnumerable<T : XContainer>.Elements
会返回子元素的集合。该集合可能为空,但不会为null。因此,您可以链接Elements
来电,而不必担心NullReferenceException
。
作为旁注,这是VB编写时的作用
Dim data = doc.<Layer1>.<Layer2>.<Layer3>.SingleOrDefault()
(虽然在VB中,你会使用方便的IEnumerable<XElements>.Value
extension method而不是SingleOrDefault,这是不幸的,在C#中不可用。如果你知道C#等价物,请发表评论。)