如何使用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的XElementValue属性,如下所示:

 Author = (string) tutorial.Element("Author") 

查看这篇文章了解更多信息:

  • 用显式和隐式转换运算符改善LINQ代码的气味