one*_*ney 3 c# xml linq linq-to-xml
这可能是一个简单的修复(好吧,它可能是)但由于某种原因我无法弄明白.
所以,我有一些看起来像这样的xml:
XElement xml = XElement.Parse (
@"<Alphabet>
<a name="A" />
<b name="B" />
<d name="D" />
<e name="E" />
</Alphabet>");
Run Code Online (Sandbox Code Playgroud)
所以稍后在我的代码中,我引用一个可能存在或不存在的节点,如下所示:
var name = (from b in xml.Descendants("c")
select b.Attribute("name")).FirstOrDefault().Value;
Run Code Online (Sandbox Code Playgroud)
但是当它不存在时,不是返回null或""而是抛出NullReferenceException:对象引用未设置为对象的实例.
在我的linq查询中检查并查看节点是否实际存在的最佳方法是什么?或者我需要检查它是否存在其他方式?
好吧,你正在选择属性 - 所以只需使用:
var nameAttribute = xml.Descendants("c").Select(b => b.Attribute("name"))
.FirstOrDefault();
if (nameAttribute != null)
{
string name = nameAttribute.Value;
}
else
{
// Whatever...
}
Run Code Online (Sandbox Code Playgroud)
(我已经将它从查询表达式更改为点表示法,因为查询很简单 - 查询表达式语法实际上并没有给你带来任何东西.)
这个解决方案的一个问题是:它没有区分存在"c"元素但它没有"name"属性,并且首先没有"c"元素.你需要能分辨出来吗?