LINQ to XML 编程基础
Via C#
System.Xml.Linq 命名空间及其相应的类赋予了 LINQ to XML 强大的功能。这
些类提供了轻松处理 XML 的能力,而不需要借助于复杂的、有时会很繁琐
的技术,如 DOM 和 XQuery。
2010
Sunny D.D
www.sunnycoder.cn
www.cnblogs.com/sunnycoder
sunny19788989@gmail.com
2010-01-30
www.cnblogs.com/sunnycoder Sunny D.D LINQ to XML 编程基础
2 / 15
目录
一、LINQ to XML 编程基础 .............................................................................................................. 3
1、LINQ to XML 类 .................................................................................................................... 3
2、XElement 类 ........................................................................................................................ 3
3、XAttribute 类 ....................................................................................................................... 6
4、XDocument 类 ..................................................................................................................... 8
二、LINQ to XML 编程概念 ..............................................................................................................10
1、加载已有的 xml ..................................................................................................................10
2、保存 xml ............................................................................................................................10
3、创建 xml ............................................................................................................................10
4、遍历 xml ............................................................................................................................10
5、操纵 xml ............................................................................................................................11
6、处理属性 ...........................................................................................................................14
本文总结........................................................................................................................................15
www.cnblogs.com/sunnycoder Sunny D.D LINQ to XML 编程基础
3 / 15
一、LINQ to XML 编程基础
1、LINQ to XML 类
System.Xml.Linq 命名空间含有 19 个类,下表列出了它们的名称及其描述:
类
描述
XAttribute
表示一个 XML 属性
XCData
表示一个 CDATA 文本节点
XComment
表示一个 XML 注释
XContainer
适用于可能具有子节点的所有节点的抽象基类
XDeclaration
表示一个 XML 声明
XDocument
表示一个 XML 文档
XDocumentType
表示一个 XML 文档类型定义 (DTD)
XElement
表示一个 XML 元素
XName
表示一个 XML 元素或属性的名称
XNamespace
表示一个 XML 的命名空间
XNode
一个抽象类,它表示 XML 树的节点
XNodeDocumentOrderComparer
提供用于比较节点的文档顺序的功能
XNodeEqualityComparer
提供用于比较节点的值是否相等的功能
XObject
XNode 和 XAttribute 的抽象基类
XObjectChange
XObject 引发事件时的事件类型
XObjectChangeEventArgs
为 Changing 和 Changed 事件提供数据
XProcessingInstruction
表示一个 XML 处理指令
XText
表示一个文本节点
以下的代码演示了如何使用 LINQ to XML 来快速创建一个 xml:
public static void CreateDocument()
{
XDocument xdoc = new XDocument
(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement("Root","root")
);
xdoc.Save(path);
}
运行该示例将会得到一个 xml 文件,其内容为:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>root</Root>
可以看出微软在 LINQ 上投入了很大的精力,使我们在编程时感觉到很舒服。下面将详细介绍处理 XML
时使用最多的三个类:XElement、XAttribute 和 XDocument。如果掌握了这些类,使用 LINQ to XML 时将会
感到很顺手。
2、XElement 类
XElement 类是 LINQ to XML 中的基础类之一。 它表示一个 XML 元素。 可以使用该类创建元素;更
www.cnblogs.com/sunnycoder Sunny D.D LINQ to XML 编程基础
4 / 15
改元素内容;添加、更改或删除子元素;向元素中添加属性;或以文本格式序列化元素内容。 还可以与
System.Xml 中的其他类(例如 XmlReader、XmlWriter 和 XslCompiledTransform)进行互操作。
使用 LINQ to XML 创建 xml 文档有很多种方式,具体使用哪种方法要根据实际需要。而创建 xml 文档
最简单、最常见的方式是使用 XElement 类。以下的代码演示了如何使用 XElement 类创建一个 xml 文档:
public static void CreateCategories()
{
XElement root = new XElement("Categories",
new XElement("Category",
new XElement("CategoryID", Guid.NewGuid()),
new XElement("CategoryName", "Beverages")
),
new XElement("Category",
new XElement("CategoryID", Guid.NewGuid()),
new XElement("CategoryName", "Condiments")
),
new XElement("Category",
new XElement("CategoryID", Guid.NewGuid()),
new XElement("CategoryName", "Confections")
)
);
root.Save(path);
}
运行该示例将会得到一个 xml 文件,其内容为:
<?xml version="1.0" encoding="utf-8"?>
<Categories>
<Category>
<CategoryID>57485174-46fc-4e8c-8d98-d25b53d504a1</CategoryID>
<CategoryName>Beverages</CategoryName>
</Category>
<Category>
<CategoryID>1474dde1-8014-48f7-b093-b47ca5d5b770</CategoryID>
<CategoryName>Condiments</CategoryName>
</Category>
<Category>
<CategoryID>364224e0-e002-4939-90fc-0fd93e0cf35b</CategoryID>
<CategoryName>Confections</CategoryName>
</Category>
</Categories>
LINQ to XML 的强大之处还在于它可以使用 LINQ to SQL 或者LINQ to Object 获取数据源,然后填充到 xml
树。以下的示例从 Northwind 数据库中读取 Categories、Products 表中的数据来创建包含产品类别,以及每
个类别下所有产品的 xml 文件:
public static void CreateCategoriesFromDatabase()
{
using (NorthwindDataContext db = new NorthwindDataContext())
{
www.cnblogs.com/sunnycoder Sunny D.D LINQ to XML 编程基础
5 / 15
XElement root = new XElement("Categories",
db.Categories
.Select
(
c => new XElement
(
"Category"
, new XElement("CategoryID", c.CategoryID)
, new XElement("CategoryName", c.CategoryName)
, new XElement
(
"Products"
, c.Products
.Select
(
p => new XElement
(
"Product"
, new XElement("ProductName", p.ProductName)
)
)
.Take(2)
)
)
)
.Take(3)
);
root.Save(path);
}
}
运行该示例将会得到一个 xml 文件,其内容为:
<?xml version="1.0" encoding="utf-8"?>
<Categories>
<Category>
<CategoryID>1</CategoryID>
<CategoryName>Beverages</CategoryName>
<Products>
<Product>
<ProductName>Chai</ProductName>
</Product>
<Product>
<ProductName>Chang</ProductName>
</Product>
</Products>
</Category>