0

嗨,我一直在使用 Xdoc 解析 xml。它工作正常,但当节点为空时会引发错误。我们如何检查空节点。EG:当听说过的标签没有值时,它会抛出一个未设置为对象实例的对象引用错误。

var data = from item in doc.Descendants("Order")
                                       select new
                                       {
                                           OrderID = item.Element("OrderID").Value,
                                           POnumber = item.Element("PurchaseNumber").Value,
                                           OrderDate = item.Element("DatePurchased").Value,
                                           source = item.Element("HearedAbout").Value
                                       }

我试过这个但不起作用

source = item.Element("HearedAbout").Value!=null?item.Element("HearedAbout").Value:"";
4

3 回答 3

3

是的,如果item.Element("HearedAbout")返回 null,那么尝试使用它的Value属性确实会失败。最简单的方法是将其转换为string而不是使用Value属性:

source = (string) item.Element("HearedAbout") ?? ""

当元素引用本身为 null 时,从to显式转换XElementstring将返回null- 然后 null 合并运算符处理您想要的默认值。

鉴于元素的其余名称,我也会考虑对这些元素使用显式转换:

select new
{
   OrderID = (int) item.Element("OrderID"),
   POnumber = (int) item.Element("PurchaseNumber"),
   OrderDate = (DateTime) item.Element("DatePurchased"),
   Source = (string) item.Element("HearedAbout") ?? ""
}

(这两个int值可能是其他类型 - 查看您的数据以解决问题。)

另请注意,为了保持一致性,我已更改为sourceSource

于 2013-06-17T06:17:50.703 回答
1

使用下面提到的代码检查

source = (string)item.Element("HearedAbout")
于 2013-06-17T06:19:30.323 回答
1

我认为是这样的:

source = Convert.ToString(item.Element("HearedAbout"))
于 2013-06-17T06:28:38.993 回答