【发布时间】:2012-11-07 14:42:26
【问题描述】:
我有一些类似于下面的 XML。我在 C# 中使用 Linq 对其进行解析,它运行良好,直到我们得到一个没有 type 的产品。
<productList>
<product>
<type>
<colour>red</colour>
</type>
<name>First</name>
</product>
<product>
<name>Second</name>
</product>
</productList>
我正在尝试访问 type 下的 colour 元素,但是当代码到达没有 type 元素的 product 时,我得到“对象引用未设置为实例对象”错误。
这是我目前用来访问它的代码。我试图解决这个问题的尝试让事情变得有点复杂。
productColour = products.Element("type").Descendants().FirstOrDefault() == null ? string.Empty : products.Element("type").Descendants().FirstOrDefault().Value,
我知道colour 元素始终是type 下的第一个元素,因此我可以使用.FirstOrDefault(),但使用此代码仍然会出现相同的错误。
谁能指出我正确的方向?我也尝试过转换为字符串,最后还有:?? " ",到目前为止都无济于事。
编辑:感谢@anthony-pegram,看起来问题是我总是试图抓住后代,即使父元素不存在。所以看起来我需要在抓住孩子之前检查父元素 - 谁能指出我的方向?
【问题讨论】:
-
当你说
Elements("type").Descendants(),并且没有“type”元素时,你会得到一个错误。您需要在查询其后代之前处理缺少的元素。到目前为止,您的尝试是处理丢失的后代,但那是在您的问题已经呈现出丑陋的头之后。 -
感谢您的评论 - 您知道如何使用 Linq 解决这个问题吗?
标签: c# .net linq xml-parsing linq-to-xml