27.4.3 使用LINQ进行遍历和查询
我们编写代码来查询前文生成的XML文档(c:\books.xml),该代码将查询title节点的值包含“计算机”的节点,并把该节点的值放入结果集,如代码清单27-11所示。
代码清单27-11 使用LINQ进行遍历和查询
using System;
using System.Linq;
using System.Xml.Linq;
namespace ProgrammingCSharp4
{
class XmlHandleSample
{
public static void Main()
{
try
{
XDocument doc=XDocument.Load(@"c:\books.xml");
XElement root=doc.Element("books");
var books=from b in root.Elements()
where b.ToString().IndexOf(“计算机”)>-1
select b.Element("title").Value;
foreach(var book in books)
{
Console.WriteLine("Book:{0}",book);
}
}
catch(System.Exception)
{
Console.WriteLine(“处理过程出错,请检查。”);
throw;
}
}
}
}
上述代码的运行结果如下:
Book:计算机程序设计艺术(第一卷,第三版)
请按任意键继续……
上述代码的要点:使用XDocument对象的Load静态方法加载XML文档到内存中。分析LINQ查询表达式的语法:
var books=from b in root.Elements()
where b.ToString().IndexOf(“计算机”)>-1
select b.Element("title").Value;
其中要点如下:
❑from子句指定了数据源root.Elements(),意即root节点的所有子节点的集合;
❑这里的变量b是迭代变量;
❑where子句根据其后的布尔表达式来筛选出符合条件的元素;
❑select子句指定所选对象的哪部分数据应该作为结果放入结果集,这里为符合要求的节点的文本值。
图27-4演示了最终放入结果集的数据——由select子句指定的、符合要求的节点的文本值。
图 27-4 使用LINQ查询表达式查询符合要求的数据