特定节点为空时,XDocument抛出错误

时间:2013-06-17 06:15:14

标签: c# xml linq linq-to-xml

您好我一直在使用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:"";

3 个答案:

答案 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"))