我正在使用xml片段,并发现我正在做很多事情:
dim x = xe.Element("foo").Element("bar").Element("Hello").Element("World").Value
但是我不能总是保证xml文档将包含foo或bar。有没有更好的方法来做这种事情而不必检查每个查询?
即
dim x = ""
if xe.Element("foo").Any() then
if xe.Element("foo").Element("bar").Any() Then
if xe.Element("foo").Element("bar").Element("Hello").Any() Then
x = xe.Element("foo").Element("bar").Element("Hello").Element("World").ValueOrDefault()
End If
End If
End If
(ValueOrDefault是我添加的扩展方法)
答案 0 :(得分:2)
基本上,你是在分析这个问题。
从这开始:
xe.Elements("foo")
这将返回<foo>
所有xe
个孩子的序列;这可能是一个空序列,但永远不会为空。
现在,扩展到:
xe.Elements("foo")
.Elements("bar")
这使用扩展方法Elements()
(框架的一部分)来查找到目前为止<bar>
元素的所有<foo>
子元素。
重复此操作,直到找到带有值的元素。然后,使用强制转换来提取值:
dim x
= (string) xe.Elements("foo")
.Elements("bar")
.Elements("Hello")
.Elements("World")
.FirstOrDefault()
同样,演员阵容由框架提供。
编写框架的智能编码器已经为您处理了所有对null的检查 - 这是使XDocument
和朋友很好编码的重要部分。
答案 1 :(得分:0)
可能需要稍微修改valueOrDefault扩展方法。基本理念:
xe.Elements("foo").Elements("bar").Elements("Hello").Elements("World").FirstOrDefault();