Linq to XML: prevent NullReferenceExpception

本文关键字:prevent NullReferenceExpception XML to Linq | 更新日期: 2023-09-27 18:21:42

我得到了一个XML,它包含有时存在有时不存在的可选元素(..)。现在,这些可选元素本身也可能包含可选元素:

<show>
  ...
    <text>
        <description> desc </description>
    </text>
  ...
</show>
<show>
    <title>I'm a show without text</title>
</show>
<show>
   <text>
       <subtitle>I have a text-node but no description-node in it.</subtitle>
   </text>
</show>

如果存在,我需要获取-node的值。像我现在这样处理它的更好方法是什么:

description = show.Element("text") != null ? show.Element("text").Element("description") != null? show.Element("text").Element("description").Value : "" : ""

这感觉不太好。。我需要查询更多的节点。

Linq to XML: prevent NullReferenceExpception

我会使用Linq到Xml:的XPath扩展

var description = (string)xdoc.XPathSelectElement("//show/text/description");

并且在访问元素的Value属性时,使用对字符串的强制转换来避免NullReference异常。

尝试使用(string)XElement转换而不是XElement.Value属性:

description = (string)show.Element("text").Element("description");

它将处理null s。