容错XML解析

时间:2012-03-01 17:13:32

标签: c#-4.0

我有一个XML文档,我正在解析它不遵循任何类型的固定架构。我需要通过执行以下操作来解析值:

invoiceDetail.PartNO = invoiceLine.Element(ns + "Item").Element(ns + "ItemID").Element(ns + "ID").Value;

在此示例中,invoiceLine属于XElement类型。问题是某些节点并不总是存在,在这种情况下我宁愿返回null或empty而不是返回错误。有没有办法当前这样做或者我应该自己创建一个特殊的函数,它需要一个名称空间和一个元素名称列表来尝试解析?

1 个答案:

答案 0 :(得分:2)

XLINQ已经这样做了 如果没有具有该名称的元素,.Element()将返回null

为避免重复的空值检查,请改用.Elements()

invoiceDetail.PartNO = (string)
    invoiceLine.Elements(ns + "Item")
               .Elements(ns + "ItemID")
               .Elements(ns + "ID")
               .SingleOrDefault();

每个Elements()来电都会返回IEnumerable<XElement>。如果没有任何匹配元素,它将返回一个空序列,其余代码仍然有效。

.SingleOrDefault()会将最终序列转换为单个元素或null (string)强制转换调用自定义显式转换,如果元素为null,则应返回null。您可以类似地直接转换为基本值类型。