如何使用LINQ-to-XML从XML中排除NULL块?
考虑这个XML文件。 请注意,第一个教程有一个Author子元素,第二个教程没有:
The Tallest WPF Tutorial - Creating A Custom Panel Control 2/18/2008 2nd WPF Tutorial - Creating A Custom Panel Control 2/18/2008
如何使用LINQ-to-XML加载存在的数据? 下面的代码在进入没有作者的Tutorial部分时会爆炸。 我无法弄清楚如何编写where语句来排除缺少作者的块,或者如何使代码优雅地跳过丢失的数据。 我试过这个:
where tutorial.Element("Title") != null
但上面没有效果….这是问题代码:
XDocument xmlDoc = XDocument.Load("C:\\xml\\2.xml"); var tutorials = from tutorial in xmlDoc.Descendants("Tutorial") select new { Author = tutorial.Element("Author").Value, Title = tutorial.Element("Title").Value, Date = tutorial.Element("Date").Value, }; foreach (var tutorial in tutorials) { Console.WriteLine("author: " + tutorial.Author); Console.ReadKey(); }
使用XElement to String转换运算符而不是Value属性 :
var tutorials = from tutorial in xmlDoc.Root.Elements("Tutorial") select new { Author = (string)tutorial.Element("Author"), Title = (string)tutorial.Element("Title"), Date = (DateTime)tutorial.Element("Date"), };
您可以执行显式强制转换为字符串,而不是引用可能为null的XElement
的Value
属性,如下所示:
Author = (string) tutorial.Element("Author")
查看这篇文章了解更多信息:
- 用显式和隐式转换运算符改善LINQ代码的气味