我正在尝试读取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>
有没有人有想法?
答案 0 :(得分:0)
试试这个
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();
答案 1 :(得分:0)
问题是某些ggtern
元素没有子DV
元素,因此在查询的这一部分中:
risque
Risque = (string) r.Element("risque").Attribute("val").Value
将返回Element
,当您尝试拨打null
时,您会收到空引用异常。
您可以通过不从序列到单个项目直到结束,并使用从元素和属性到基本类型(如Attribute
)的显式转换来解决此问题。这样,将null属性从attribute转换为string将只返回null。
string
有关正常工作的演示,请参阅this fiddle。