X文档遍历
我是 LINQ to XML 世界的新手。我正在尝试检索 Identity
的值,但仅当 Credential
的 domain
属性为“NetworkID”时。这是我正在测试的代码:
XML 片段:
<Sender>
<Credential domain="NetworkID">
<Identity>MyIdentity</Identity>
<SharedSecret>MySharedSecret</SharedSecret>
</Credential>
<UserAgent>MyUserAgent</UserAgent>
</Sender>
C#:
var credential = xdoc.Descendants("Sender")
.Elements("Credential")
.Where(x => x.Attribute("domain").Value == "NetworkID").FirstOrDefault()
.Descendants("Identity").FirstOrDefault();
问题:
显然,如果 Credential
节点未找到,LINQ 查询将生成错误,因为我在 null
上调用 .Descendants()
。
是否可以编写查询,以便在未找到任何一个元素时返回 Identity
或 null
?
I'm new the the LINQ to XML world. I'm attempting to retrieve the value of Identity
but only when the domain
attribute of Credential
is "NetworkID". Here's the code I'm testing with:
XML Snippet:
<Sender>
<Credential domain="NetworkID">
<Identity>MyIdentity</Identity>
<SharedSecret>MySharedSecret</SharedSecret>
</Credential>
<UserAgent>MyUserAgent</UserAgent>
</Sender>
C#:
var credential = xdoc.Descendants("Sender")
.Elements("Credential")
.Where(x => x.Attribute("domain").Value == "NetworkID").FirstOrDefault()
.Descendants("Identity").FirstOrDefault();
Question:
Obviously, if the Credential
node is not found, the LINQ query will generate an error because I'm calling .Descendants()
on null
.
Is it possible to write the query so that it return Identity
or null
if either element is not found?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
只需删除
Where()
之后的FirstOrDefault()
:Where()
返回空结果集,而FirstOrDefault()
空结果集返回 null 这就是.Where().FirstOrDefault().Descendants()
导致 null 引用异常的原因。Just remove
FirstOrDefault()
after theWhere()
:Where()
returns empty result set andFirstOrDefault()
on empty result set returns null this is why.Where().FirstOrDefault().Descendants()
caused null reference exception.如果你使用
你应该会得到你想要的。或者您需要分解代码,在第一部分中执行一个 FirstOrDefault() 例如
If you use
you should get what you want. Or you need to break the code up, doing one FirstOrDefault() in the first part e.g.