【发布时间】:2010-09-04 15:19:33
【问题描述】:
考虑以下 XML:
<response>
<status_code>200</status_code>
<status_txt>OK</status_txt>
<data>
<url>http://bit.ly/b47LVi</url>
<hash>b47LVi</hash>
<global_hash>9EJa3m</global_hash>
<long_url>http://www.tumblr.com/docs/en/api#api_write</long_url>
<new_hash>0</new_hash>
</data>
</response>
我正在寻找一种非常短的方法来获取 <hash> 元素的值。我试过了:
var hash = xml.Element("hash").Value;
但这不起作用。是否可以向XElement 提供 XPath 查询?我可以使用较旧的 System.Xml 框架来做到这一点,例如:
xml.Node("/response/data/hash").Value
在 LINQ 命名空间中有类似的东西吗?
更新:
在胡思乱想之后,我找到了一种方法来做我想做的事情:
var hash = xml.Descendants("hash").FirstOrDefault().Value;
我仍然有兴趣看看是否有人有更好的解决方案?
【问题讨论】:
-
在这种情况下不要使用 FirstOfDefault(),因为如果没有找到“hash”,你会得到一个 NullReferenceException。改用 First(),你会得到一个更具描述性的异常。
-
如果您希望“哈希”始终存在,请使用 First()。否则,只要在访问 Value 属性之前检查 null,FirstOrDefault() 就可以了。
标签: .net xml xpath linq-to-xml xelement