您好我一直在使用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:"";
答案 0 :(得分:3)
是的,如果item.Element("HearedAbout")
返回null,那么尝试使用其Value
属性确实会失败。最简单的方法是将其转换为string
,而不是使用Value
属性:
source = (string) item.Element("HearedAbout") ?? ""
当元素引用本身为null时,explicit conversion from XElement
to string
将返回null
- 然后空合并运算符将处理您想要的默认值。
鉴于你的元素的其他名称,我也考虑使用显式转换:
select new
{
OrderID = (int) item.Element("OrderID"),
POnumber = (int) item.Element("PurchaseNumber"),
OrderDate = (DateTime) item.Element("DatePurchased"),
Source = (string) item.Element("HearedAbout") ?? ""
}
(这两个int
值可能是其他类型 - 请查看您的数据以进行解决。)
另请注意,我已将source
更改为Source
以保持一致性。
答案 1 :(得分:1)
使用以下经过检验的代码检查
source = (string)item.Element("HearedAbout")
答案 2 :(得分:1)
我认为这就是:
source = Convert.ToString(item.Element("HearedAbout"))