<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet title='EmpInfo'?> 
<!--some comments--> 
<Root> 
<Employees> 
<Employee> 
<Name>Scott Klein</Name> 
<Title>Geek</Title> 
<HireDate>02/05/2007</HireDate> 
<Gender>M</Gender> 
</Employee> 
</Employees> 
</Root> 
<!--more comments--> 
XDocument类包含多个与XElement类相同的方法,具体内容可以参阅MSDN。需要注意的是,处理节点和元素的大部分功能都可以通过XElement获得,只有当绝对需要文档层次的处理能力,以及需要访问注释、处理指令和声明时,才有使用XDocument类的必要。
创建了xml文档后,可以使用NodesAfterSelf方法返回指定的XElement元素之后的所有同级元素。需要注意的是,此方法只包括返回集合中的同级元素,而不包括子代。此方法使用延迟执行。以下代码演示了这一过程:
复制代码 代码如下:
 
public static void NodesAfterSelf() 
{ 
XElement root = new XElement("Categories", 
new XElement("Category", 
new XElement("CategoryID", Guid.NewGuid()), 
new XElement("CategoryName", "食品"), 
new XElement("Description", "可以吃的东西") 
) 
); 
foreach (var item in root.Element("Category").Element("CategoryID").NodesAfterSelf()) 
{ 
Console.WriteLine((item as XElement).Value); 
} 
} 
执行的结果如下:
使用LINQ to XML中的类来处理xml十分简单和高效,包括创建、查询和操纵xml。
二、LINQ to XML编程概念 
本节将介绍LINQ to XML编程的相关概念,例如如何加载xml、创建全新xml、操纵xml的信息以及遍历xml文档。 
1、加载已有的xml 
使用LINQ to XML加载xml可以从多种数据源获得,例如字符串、XmlReader、TextReader或文件。 
下面的示例演示了如何从文件中加载xml: 
复制代码 代码如下:
 
public static void LoadFromFile() 
{ 
XElement root = XElement.Load(path); 
Console.WriteLine(root.ToString()); 
} 
也可以使用Parse方法从一个字符串加载xml:
复制代码 代码如下:
 
public static void LoadFromString() 
{ 
XElement root = XElement.Parse(@" 
<Categories> 
<Category> 
<CategoryID>1</CategoryID> 
<CategoryName>Beverages</CategoryName> 
<Description>Soft drinks, coffees, teas, beers, and ales</Description> 
</Category> 
</Categories> 
"); 
Console.WriteLine(root.ToString()); 
} 
2、保存xml
在前面的示例中曾多次调用XElement对象的Save方法来保存xml文档,在这里就不冗述了。
3、创建xml
在前面的示例中曾多次调用XElement对象的构造函数来创建xml文档,在这里就不冗述了。需要说明的是,在使用LINQ to XML创建xml文档时,会有代码缩进,这使代码的可读性大大加强。
4、遍历xml
使用LINQ to XML在xml树中遍历xml是相当简单的。只需要使用XElement和XAttribute类中所提供的方法。Elements和Element方法提供了定位到某个或某些元素的方式。下面的示例演示了如何遍历xml树,并获取指定元素的方式:
复制代码 代码如下:
 
public static void Enum() 
{ 
XElement root = new XElement("Categories"); 
using (NorthwindDataContext db = new NorthwindDataContext()) 
{ 
root.Add( 
db.Categories 
.Select 
( 
c => new XElement 
( 
"Category" 
, new XElement("CategoryName", c.CategoryName) 
) 
) 
); 
} 
foreach (var item in root.Elements("Category")) 
{ 
Console.WriteLine(item.Element("CategoryName").Value); 
} 
} 
} 
上述代码运行的结果为:
是不是很简单呢?Nodes()、Elements()、Element(name)和Elements(name)方法为xml树的导航提供了基本功能。 方法 说明 AddAfterSelf 紧跟在此节点之后添加指定的内容 AddBeforeSelf 紧邻此节点之前添加指定的内容
5、操纵xml 
LINQ to XML一个重要的特性是能够方便地修改xml树,如添加、删除、更新和复制xml文档的内容。 
I.插入 
使用XNode类的插入方法可以方便地向xml树添加内容: 
在下面的示例中,使用AddAfterSelf方法向现有xml中添加一个新节点: 
复制代码 代码如下:

