C# LINQ XML 属性不存在



我试图读取一个xml文件并获取属性,但有时这个属性不存在。

当它不存在时,我会得到这个错误:

System.Linq.Enumerable+WhereSelectEnumerableIterator 2[System.Xml.Linq.XElement,<>f__AnonymousType0 2[System.String,System.String]]

和:

严重错误:System.NullReferenceException:….

我的代码:

string url = @"http://vigilance.meteofrance.com/data/NXFR33_LFPW_.xml";
XDocument doc = XDocument.Load(url);
var selectedBook = from r in doc.Descendants("DV")
                          .Where(r => (string)r.Attribute("dep").Value == Departement)
                           select new
                           {
                               Color = r.Attribute("coul").Value,
                               Risque = (string) r.Element("risque").Attribute("val").Value,
                           };

XML看起来是这样的:

<DV dep="02" coul="1"/>
<DV dep="03" coul="3">
    <risque val="6"/>
</DV>

有人有主意吗?

问题是一些DV元素没有子risque元素,因此在查询的这一部分中:

Risque = (string) r.Element("risque").Attribute("val").Value

Element将返回null,当您尝试调用Attribute时,您将获得一个空引用异常。

您可以通过使从序列到单个项直到结束,并使用从元素和属性到基本类型(如string)的显式转换来解决此问题。这样,为null属性从属性转换为字符串只会返回null。

Risque = (string) r.Elements("risque").Attributes("val").SingleOrDefault()

看看这个小提琴的工作演示。

试试这个

            XDocument doc = XDocument.Load(url);
            var selectedBook = doc.Descendants("DV")
                               .Where(r => (string)r.Attribute("dep") == Departement)
                               .Select(r => new {
                                   Color = r.Attribute("coul").Value,
                                   Risque = r.Element("risque") == null ? null : (string)r.Element("risque").Attribute("val").Value,
                               }).ToList();

相关内容

  • 没有找到相关文章

最新更新