linq对xml的操作
- 格式:docx
- 大小:74.95 KB
- 文档页数:18
利用VB操作XML数据在VB中,有几种方法可以操作XML数据。
下面将介绍一些常用的方法:1. 创建XML文档:可以使用XMLTextWriter类或XDocument类来创建XML文档。
使用XMLTextWriter类:```vbDim writer As New XmlTextWriter("C:\path\to\file.xml", System.Text.Encoding.UTF8)writer.WriteStartDocument(True)writer.Formatting = Formatting.Indentedwriter.Indentation = 2writer.WriteStartElement("RootElement")writer.WriteEndElementwriter.WriteEndDocumentwriter.Close```使用XDocument类:```vbDim doc As XDocument = New XDocumentNew XDeclaration("1.0", "utf-8", "yes"),New XElement("RootElement")doc.Save("C:\path\to\file.xml")```2. 读取XML文档:可以使用XmlDocument类、XmlReader类或XDocument类来读取XML文档。
使用XmlDocument类:```vbDim doc As New XmlDocumentdoc.Load("C:\path\to\file.xml")Dim root As XmlNode = doc.SelectSingleNode("RootElement")```使用XmlReader类:```vbDim reader As XmlReader =XmlReader.Create("C:\path\to\file.xml")While reader.ReadIf reader.NodeType = XmlNodeType.Element AndAlso = "RootElement" Then'处理根元素End IfEnd Whilereader.Close```使用XDocument类:```vbDim doc As XDocument = XDocument.Load("C:\path\to\file.xml") Dim root As XElement = doc.Element("RootElement")```使用XmlDocument类:```vbDim doc As New XmlDocumentdoc.Load("C:\path\to\file.xml")Dim root As XmlNode = doc.SelectSingleNode("RootElement")Dim childElement As XmlElement =doc.CreateElement("ChildElement")Dim attribute As XmlAttribute =doc.CreateAttribute("AttributeName")attribute.Value = "AttributeValue"childElement.Attributes.Append(attribute)root.AppendChild(childElement)doc.Save("C:\path\to\file.xml")```使用XmlReader类:```vbDim reader As XmlReader =XmlReader.Create("C:\path\to\file.xml")While reader.ReadIf reader.NodeType = XmlNodeType.Element AndAlso = "RootElement" ThenDim childElement As XmlWriter =reader.CreateElement("ChildElement")writer.WriteAttributeString("AttributeName", "AttributeValue")writer.WriteEndElementEnd IfEnd Whilereader.Close```使用XDocument类:```vbDim doc As XDocument = XDocument.Load("C:\path\to\file.xml") doc.Root.Add(New XElement("ChildElement", NewXAttribute("AttributeName", "AttributeValue")))doc.Save("C:\path\to\file.xml")```以上是操作XML数据的一些基本方法,可以根据需求进行扩展。
linux xmllint用法摘要:1.概述2.Linux 和xmllint 的关系3.xmllint 的基本用法4.xmllint 的选项和参数5.xmllint 的实例6.总结正文:1.概述xmllint 是一个用于解析XML 文档的轻量级命令行工具,它可以在Linux 系统上使用。
xmllint 可以解析XML 文档,并输出解析后的结果,方便用户进行进一步的处理。
2.Linux 和xmllint 的关系Linux 是一个开源的操作系统,它提供了许多命令行工具,以便用户在终端上进行各种操作。
xmllint 是Linux 系统中的一个命令行工具,用户可以在终端中使用它来解析XML 文档。
3.xmllint 的基本用法xmllint 的基本用法如下:```xmllint [options] xmlfile```其中,`xmlfile`是用户要解析的XML 文档的路径,`options`是xmllint 的选项和参数。
4.xmllint 的选项和参数xmllint 有许多选项和参数,它们可以帮助用户对XML 文档进行各种操作。
例如,`-i`选项可以让xmllint 忽略XML 文档的注释,`-s`选项可以让xmllint 将XML 文档解析为脚本,`-p`选项可以让xmllint 打印XML 文档的解析树等。
5.xmllint 的实例例如,如果用户想要解析一个名为`example.xml`的XML 文档,并忽略其中的注释,可以使用如下命令:```xmllint -i example.xml```如果用户想要将一个名为`example.xml`的XML 文档解析为脚本,可以使用如下命令:```xmllint -s example.xml```如果用户想要打印一个名为`example.xml`的XML 文档的解析树,可以使用如下命令:```xmllint -p example.xml```6.总结xmllint 是Linux 系统中的一个命令行工具,它可以用于解析XML 文档。
21.1 LINQ查询概述LINQ可以对多种数据源和对象进行查询,如数据库、数据集、XML文档甚至是数组,这在传统的查询语句中是很难实现的。
如果有一个集合类型的值需要进行查询,则必须使用Where等方法进行遍历,而使用LINQ可以仿真SQL语句的形式进行查询,极大的降低了难度。
21.1.1 准备数据源既然LINQ可以查询多种数据源和对象,这些对象可能是数组,可能是数据集,也可能是数据库,那么在使用LINQ进行数据查询时首先需要准备数据源。
1.数组数组中的数据可以被LINQ查询语句查询,这样就省去了复杂的数组遍历。
数组数据源示例代码如下所示。
string[] str = { "学习", "学习LINQ", "好好学习", "生活很美好" };int[] inter = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };数组可以看成是一个集合,虽然数组没有集合的一些特性,但是从另一个角度上来说可以看成是一个集合。
在传统的开发过程中,如果要筛选其中包含“学习”字段的某个字符串,则需要遍历整个数组。
2.SQL Server在数据库操作中,同样可以使用LINQ进行数据库查询。
LINQ以其优雅的语法和面向对象的思想能够方便的进行数据库操作,为了使用LINQ进行SQL Server数据库查询,可以创建两个表,这两个表的结构如下所示。
Student(学生表):❑S_ID:学生ID。
❑S_NAME:学生姓名。
❑S_CLASS:学生班级。
❑C_ID:所在班级的ID。
上述结构描述了一个学生表,可以使用SQL语句创建学生表,示例代码如下所示。
USE [student]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[Student]([S_ID] [int] IDENTITY(1,1) NOT NULL,[S_NAME] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,[S_CLASS] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,[C_ID] [int] NULL,CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED([S_ID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]为了更加详细的描述一个学生所有的基本信息,就需要创建另一个表对该学生所在的班级进行描述,班级表结构如下所示。
linq select 对象(原创版)目录1.LINQ 的基本概念2.LINQ 的作用3.LINQ select 对象的使用方法4.LINQ select 对象的实例正文一、LINQ 的基本概念LINQ(Language Integrated Query,即语言集成查询)是.NET Framework引入的一种强大的查询技术,它将查询功能与编程语言(如C#和)相结合,允许程序员在编程语言中进行查询操作。
通过LINQ,可以轻松地对各种数据源(如数组、集合、XML、数据库等)进行查询和操作。
二、LINQ 的作用LINQ 的作用主要体现在以下几个方面:1.提供了一种统一的查询模型,可以简化查询操作的复杂度。
2.允许在编程语言中进行查询,提高了代码的可读性和可维护性。
3.支持各种数据源,使得查询操作更加灵活。
三、LINQ select 对象的使用方法在 LINQ 中,select 对象用于对数据源进行查询和投影。
它的基本语法如下:```from dataSource in someQueryselect new SomeType { Property1 = value1, Property2 = value2 };```其中,dataSource 表示数据源,someQuery 表示查询条件,new SomeType 表示新创建的对象类型,Property1 和 Property2 表示对象的属性,value1 和 value2 表示属性的值。
举个例子,假设我们有一个 Person 类,包含 Name 和 Age 两个属性,现在有一个包含多个 Person 对象的列表,我们希望查询年龄大于 18 的 Person 对象,并将查询结果存储到一个新的列表中。
使用 LINQ select 对象可以这样实现:```csharpList<Person> people = new List<Person>{new Person { Name = "张三", Age = 18 },new Person { Name = "李四", Age = 20 },new Person { Name = "王五", Age = 16 }};List<Person> adults = from p in peoplewhere p.Age > 18select p;```四、LINQ select 对象的实例除了上面的例子,我们还可以通过 LINQ select 对象对数据源进行各种查询和操作。
linux xmllint用法摘要:一、Linux 简介二、XMLLint 工具介绍三、XMLLint 的基本用法1.安装和配置2.验证XML 文档3.格式化XML 文档4.查询XML 文档5.修改XML 文档四、XMLLint 在实际应用中的案例五、总结正文:一、Linux 简介Linux 是一个免费、开源的类Unix 操作系统。
它具有良好的稳定性、高度可定制性和强大的功能,广泛应用于服务器、嵌入式设备和超级计算机等领域。
Linux 系统中有许多实用的工具,可以帮助用户更高效地处理各种任务。
二、XMLLint 工具介绍XMLLint 是一个用于验证和处理XML 文档的命令行工具。
它基于libxml2 库,支持XML 1.0 标准,可以检查XML 文档的语法正确性、结构完整性以及遵循的规范。
通过XMLLint,用户可以轻松地识别和纠正XML 文档中的错误,从而保证数据的准确性和一致性。
三、XMLLint 的基本用法1.安装和配置在Linux 系统中,可以通过包管理器(如apt、yum 等)安装XMLLint。
以Ubuntu 系统为例,可以使用以下命令进行安装:```sudo apt-get install libxml2-utils```2.验证XML 文档XMLLint 的最基本用法是验证XML 文档的语法正确性。
使用如下命令:```xmllint --valid file.xml```其中,`file.xml`是需要验证的XML 文档。
如果文档没有错误,XMLLint 会输出“OK”,否则会显示错误信息。
3.格式化XML 文档XMLLint 还可以对XML 文档进行格式化,使其更易读。
使用如下命令:```xmllint --format file.xml```同样,`file.xml`是需要格式化的XML 文档。
4.查询XML 文档XMLLint 支持XPath 表达式,可以用来查询XML 文档中的数据。
linuxxmllint用法xmllint是一个功能强大的命令行工具,用于验证和解析XML文档。
它是libxml库的一部分,可在Linux系统上使用。
本文将详细介绍xmllint的用法,包括验证XML文档、格式化XML文档、查询XML文档等方面。
1.验证XML文档xmllint可以用于验证XML文档的有效性,即验证它们是否符合XML语法规则。
使用它的--valid选项可以执行验证操作。
示例命令如下:```xmllint --valid example.xml```这将验证example.xml文档是否有效。
如果文档有效,则不会有输出。
如果文档无效,则会显示一条错误消息。
2.格式化XML文档xmllint还可以用来格式化XML文档,使其易于阅读和理解。
使用--format选项可以对XML文档进行格式化。
示例命令如下:```xmllint --format example.xml```这将格式化example.xml文档,并在标准输出中显示格式化后的结果。
3.查询XML文档使用xmllint的--xpath选项可以执行XPath查询操作,从XML文档中提取所需的数据。
以下是一个示例命令:```xmllint --xpath "//book[price>10]/title" example.xml```这将执行一个XPath查询,提取example.xml文档中价格大于10的书籍的标题。
输出结果将显示在标准输出中。
4.修改XML文档xmllint还可以用来修改XML文档。
使用--shell选项可以进入一个交互式shell环境,以执行各种XML修改操作。
以下是一个示例命令:```xmllint --shell example.xml```这将打开一个交互式shell环境,您可以在其中执行各种shell命令来修改XML文档。
例如,您可以使用cat命令查看文档内容,使用set命令更改元素的文本内容,使用write命令保存修改后的文档等等。
linqpad使用场景LINQPad使用场景一、介绍LINQPad是一款功能强大的IDE(集成开发环境),专门用于C#和LINQ查询的编写和调试。
它为开发人员提供了一个简单直观的界面,集成了强大的调试工具和查询语言,方便对数据进行查询和处理。
本文将介绍LINQPad的使用场景,并探讨在实际开发中的应用。
二、理论基础在深入探讨LINQPad的使用场景之前,我们先来了解一下LINQ (Language Integrated Query)的基本概念。
LINQ是.NET框架中的一组技术,可以通过统一的查询语法对各种数据源(如数据库、XML文档、对象集合等)进行查询和操作。
LINQPad则是专门用于编写和调试LINQ查询的工具。
三、示例场景1. 数据查询和筛选LINQPad提供了直观的查询语法和强大的查询功能,方便对各种数据进行查询和筛选。
例如,我们可以对数据库中的表进行查询,根据条件筛选出符合要求的数据,然后进行进一步的处理和分析。
此外,LINQPad还支持对XML文档和对象集合进行查询,极大地方便了数据的筛选和分析工作。
2. 数据库交互在软件开发中,与数据库交互是非常常见的需求。
使用LINQPad,我们可以轻松地连接到各种数据库,执行SQL查询和数据操作。
通过直观的界面和强大的调试工具,开发人员可以快速调试和优化数据库查询,提高开发效率和性能。
3. 编写和测试LINQ查询在开发过程中,我们经常需要编写一些LINQ查询,以便对数据进行进一步的处理和分析。
使用LINQPad,我们可以方便地编写和测试LINQ查询语句,通过实时的结果预览功能,快速验证查询逻辑的正确性。
同时,LINQPad还支持直接执行并调试查询,方便快速发现和修复问题。
4. 教学和学习工具LINQPad不仅仅是一个实用的工具,它还可以作为教学和学习的工具。
对于初学者来说,LINQPad提供了简单易懂的界面和示例代码,帮助他们快速理解LINQ的基本概念和语法。
在C#中遍历XML⽂件的所有节点本⽂纪录的内容为:循环遍历XML⽂件的所有节点的⽅法,思路就是当遇到某⼀个节点包含⼦节点时,继续循环遍历。
如果对循环⼦节点的位置有特殊的需求,适当做出修改即可。
1using System;2using System.Collections.Generic;3using System.IO;4using System.Xml.Linq;56namespace Tool7 {8class Program9 {10static void Main(string[] args)11 {1213 XDocument xmlDocument = XDocument.Load(@"C:\Users\TestFile.xml");14 Dictionary<string, string> elementDic = new Dictionary<string, string>();15 GetElements(xmlDocument.Root.Elements(), "Objects", elementDic, "Left");16foreach (var item in elementDic)17 {18 Console.WriteLine("properites names:{0} properites values:{1}", item.Key, item.Value);19 }20 Console.ReadLine();21 }2223///<summary>24///将XML中的内容全部读取出来25///</summary>26///<param name="xElements"></param>27///<param name="parentNodeName"></param>28///<param name="elementDic"></param>29///<param name="dictionaryValue"></param>30public static void GetElements(IEnumerable<XElement> xElements,string parentNodeName, Dictionary<string, string> elementDic,string dictionaryValue)31 {3233foreach (XElement item in xElements)34 {35if (item.HasElements)36 {37 GetElements(item.Elements(), parentNodeName+.ToString(), elementDic, dictionaryValue);38 }39else40 {41 elementDic.Add(parentNodeName + + item.Value, dictionaryValue);42 }43 }44 }45 }46 }。
xml中include用法一、概述XML(Extensible Markup Language)是一种用于存储和交换数据的标记语言,广泛应用于网络应用程序和文档的表示。
在XML中,include元素可用于引用其他XML文件,以便在大型项目中组织和管理代码。
二、include元素的使用include元素用于包含另一个XML文件的内容。
它通常与XML文档中的其他元素结合使用,以将其他文件的内容插入到当前文件中。
以下是include元素的基本语法:```php<include file="path/to/file.xml"/>```其中,file属性指定要包含的XML文件的路径。
可以使用相对路径或绝对路径来指定文件的位置。
当包含文件时,XML解析器会读取指定路径下的文件,并将其内容插入到当前文件中相应的位置。
这允许您在大型项目中轻松地组织和重用代码。
三、注意事项使用include元素时,请注意以下几点:1. 确保被包含的文件具有正确的XML结构,并且符合XML命名约定。
否则,包含的文件可能无法正确解析。
2. 确保被包含的文件路径正确,并且可以从包含文件的目录中访问。
如果路径不正确或无法访问,则包含操作可能会失败。
3. 在大型项目中,使用include元素时应注意性能问题。
频繁地包含大型文件可能会导致性能下降。
考虑使用缓存或其他优化技术来提高性能。
4. 在使用include元素时,确保与其他XML工具和框架兼容。
某些工具可能不支持include元素,或者对它的使用有特殊的要求和限制。
四、示例以下是一个简单的示例,展示如何在XML中使用include元素:假设您有一个名为“main.xml”的文档,其中包含以下代码:```php<root><include file="header.xml"/><!-- 其他内容 --></root>```header.xml”文件的内容如下:```xml<header><title>这是标题</title><!-- 其他头部信息 --></header>```当解析“main.xml”文件时,XML解析器将读取“header.xml”文件并将其内容插入到“main.xml”中的相应位置。
特别惠团购网(高品质、超低价) 第21章使用LINQ查询了解了基本的LINQ基本概念,以及Lambda表达式基础后,就能够使用LINQ进行应用程序开发。
LINQ使用了Lambda表达式,以及底层接口实现了对集合的访问和查询,开发人员能够使用LINQ对不同的对象,包括数据库、数据集和XML文档进行查询。
21.1 LINQ查询概述LINQ可以对多种数据源和对象进行查询,如数据库、数据集、XML文档甚至是数组,这在传统的查询语句中是很难实现的。
如果有一个集合类型的值需要进行查询,则必须使用Where等方法进行遍历,而使用LINQ可以仿真SQL语句的形式进行查询,极大的降低了难度。
21.1.1 准备数据源既然LINQ可以查询多种数据源和对象,这些对象可能是数组,可能是数据集,也可能是数据库,那么在使用LINQ进行数据查询时首先需要准备数据源。
1.数组特别惠团购网(高品质、超低价) 数组中的数据可以被LINQ查询语句查询,这样就省去了复杂的数组遍历。
数组数据源示例代码如下所示。
string[] str = { "学习", "学习LINQ", "好好学习", "生活很美好" };int[] inter = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };数组可以看成是一个集合,虽然数组没有集合的一些特性,但是从另一个角度上来说可以看成是一个集合。
在传统的开发过程中,如果要筛选其中包含“学习”字段的某个字符串,则需要遍历整个数组。
2.SQL Server在数据库操作中,同样可以使用LINQ进行数据库查询。
LINQ以其优雅的语法和面向对象的思想能够方便的进行数据库操作,为了使用LINQ进行SQL Server数据库查询,可以创建两个表,这两个表的结构如下所示。
Student(学生表):S_ID:学生ID。
S_NAME:学生姓名。
使用XML LINQ查询和转换XML分类:LINQ 里程2008-07-28 14:00 2556人阅读评论(0) 收藏举报使用XML LINQ查询和转换XML本章包括⏹XML LINQ查询轴方法⏹使用XML LINQ查询XML文档⏹转换XML10.1 XML LINQ 轴方法XML LINQ提供了一些可以使用LINQ的轴方法。
本章的目的就是介绍这些轴方法,然后将它们与查询操作符联合使用。
开始之前,让我们先浏览一遍示例XML文件,列表10.1展示了书籍及其目录信息的XML文件内容。
列表10.1 示例XML文件<category name="Technical"><category name=".NET"><books><book>CLR via C#</book><book>Essential .NET</book></books></category><category name="Design"><books><book>Refactoring</book><book>Domain Driven Design</book><book>Patterns of Enterprise Application Architecture</book></books></category><books><book>Extreme Programming Explained</book><book>Pragmatic Unit Testing with C#</book><book>Head First Design Patterns</book></books></category>这个XML的层次很简单。
它包含一个parent <category>元素,该元素又包含了一系列其它的子节点(<category>元素或者<books>元素),这些子节点又有自己的子节点。
使用XML LINQ轴方法,我们可以选择我们感兴趣的元素和属性。
在继续之前,不得不强调一下,对于这些轴方法,上下文很重要。
为了理解查询的结果,需要知道XML树中的当前位置。
现在我们需要轴方法的帮助,产生如下结果:.NET- CLR via C#- Essential .NET为了产生这种结果,需要先熟悉一下Element, Attribute和Elements的轴方法。
10.1.1Element要产生以上结果,第一件要做的事就是选择. NET category元素。
元素轴方法允许我们通过名称选择单个XML元素。
如列表10.2所示:列表10.2 使用元素的轴方法选择一个元素XElement root = XElement.Load("categorizedBooks.xml");XElement dotNetCategory = root.Element("category");Console.WriteLine(dotNetCategory);需要阐明的一点是,Element轴方法接受一个XName参数,并返回第一个匹配此XName的子元素。
以上代码将会在控制台上输出以下内容:<category name=".NET"><books><book>CLR via C#</book><book>Essential .NET</book></books></category>如果Element轴方法没有找到指定名称的元素,那么将返回一个null值。
下面要做的就是获取.NET category XElement对象的name属性。
10.1.2Attribute使用Attribute轴方法,可以获得name属性,跟Element轴方法一样,Attribute 也返回第一个匹配XName参数的属性,列表10.3显示了此轴方法的用法。
列表10.3 使用Attribute获取一个XML元素上的属性XElement root = XElement.Load("categorizedBooks.xml");XElement dotNetCategory = root.Element("category");XAttribute name = dotNetCategory.Attribute("name");如果没有找到匹配的属性,Attribute轴方法将会返回一个null。
现在我们已经获得了XAttribute对象,可以通过将其转换为一个string,然后打印到控制台上,如下:Console.WriteLine((string) name);结果如下.NET接下来的工作,就是获取所有当前catalog元素包含的book内容。
因为这是一个集合,所以我们需要使用Elements轴方法。
10.1.3ElementsElements方法和Element方法的主要区别是,Elements方法返回所有匹配的元素。
如你所料,Elements方法返回一个IEnumerable<XElement>对象。
列表10.4显示了如何使用Elements轴方法获取所有.Net catalog元素下book元素。
列表10.4 使用Elements方法选择所有book字节点XElement root = XElement.Load("categorizedBooks.xml");XElement dotNetCategory = root.Element("category");XAttribute name = dotNetCategory.Attribute("name");XElement books = dotNetCategory.Element("books");IEnumerable<XElement> bookElements = books.Elements("book");Console.WriteLine((string) dotNetcategory);foreach(XElement bookElement in bookElements){Console.WriteLine(" - " + (string)bookElement);}运行以上代码,得到如下结果:.NET- CLR via C#- Essential .NET此外,Elements方法还提供了一个无参数的重载,它会返回所有子节点。
至此为止,我们已经实现了预定的目标。
不过还有一些其它重要的轴方法也是我们应该学习的。
10.1.4DescendantsDescendants轴方法与Elements方法类似,但是它只是在字节点中查找,Descendants将会在所有的后代节点中查找。
当你不确定要查找元素的层次的时候,使用Descendants方法非常有用。
Descendants有一个接受XName的重载和一个无参数的重载,概念上跟Elements方法类似。
还是使用10.1中XML数据,这次我们要获取所有的book元素,而不管它在哪个目录下。
因为book元素在不同的层次下,所以我们不能使用Elements轴方法,使用Descendants方法可以很好的完成这个工作,如列表10.5所示:列表10.5 使用Descendants 方法获取book元素XElement books = XElement.Load("categorizedBooks.xml");foreach(XElement bookElement in books.Descendants("book")){Console.WriteLine((string)bookElement);}输出如下:CLR via C# Essential .NET RefactoringDomain Driven DesignPatterns of Enterprise Application ArchitectureExtreme ProgrammingExplained Pragmatic Unit Testing with C#Head First Design Patterns还有一个DescedantNodes轴方法,它与Descendants方法类似。
区别是,DescedantNodes方法的返回结果还包含那些非元素节点(如XComment和XProcessingInstruction)。
它返回一个IEnumerable< XNode >对象,而不是IEnumerable< XElement >.注意到Descendants方法并不会把当前节点也包括在搜索上下文中。
如果你希望搜索包含当前节点的功能,可以使用DescendantsAndSelf方法。
再次返回10.1引入的XML,如下:<category name="Technical"><category name=".NET"><books><book>CLR via C#</book><book>Essential .NET</book></books></category><category name="Design"><books><book>Refactoring</book><book>Domain Driven Design</book><book>Patterns of Enterprise Application Architecture</book></books></category><books><book>Extreme Programming Explained</book><book>Pragmatic Unit Testing with C#</book><book>Head First Design Patterns</book></books></category>列表10.6的代码比较了Descendants和DescendantsAndSelf方法。