使用LINQ访问XML
1. LINQ to XML 简介
1.1. 使用 LINQ 访问 XML
• 更好的操作 XML
• 支持语言集成查询
• 更方便、更快速、更简单、更智能的XML API
1.2. LINQ to XML
• LINQ to XML 是一种启用了 LINQ 的内存XML 编程接口,使用它,可以在 .NET
Framework 编程语言中处理XML。
• 它将 XML 文档置于内存中,这一点很像文档对象模型(DOM)。
• 它提供一种新的对象模型,这是一种更轻量的模型,使用也更方便,这种模型利用
了Visual C# 2008 在语言方面的改进。
2. LINQ to XML 类
2.1. XElement 类
• 它表示一个 XML 元素
• 可以使用该类
– 创建元素
– 更改元素内容
– 添加、更改或删除子元素
– 向元素中添加属性
– 以文本格式序列化元素内容
• 可以与 System.Xml 中的其他类(例如XmlReader、XmlWriter 和
XslCompiledTransform)进行互操作。
2.2. XAttribute 类
• 属性是与元素关联的名称/值对
• XAttribute 类表示 XML 属性
• 属性集合的LINQ 查询表达式与元素集合的LINQ 查询表达式看起来非常相似。
2.3. XDocument 类
• XDocument 类包含有效的 XML 文档所需的信息。其中包括XML 声明、处理指令和注释。
• 如果需要XDocument 类提供的特定功能,您只需创建XDocument 对象。在很多情况下,可以
直接使用Xelement。直接使用XElement 是一种比较简单的编程模型。
• XDocument 是从XContainer 派生的。因此,它可以包含子节点。但是,XDocument 对象只能有
一个子XElement 节点。这反映了XML 标准,即在 XML 文档中只能有一个根元素。
3. 使用LINQ to XML
3.1. XElement 类功能
• 构造 XML 树
• 序列化 XML 树
• 通过轴方法检索XML 数据
• 查询XML 树
• 修改 XML 树
3.2. 构造 XML 树
• “函数构造”方法
–通过将查询结果用作 XElement 和 XAttribute对象构造函数的参数,实现了一种功能强大的
创建 XML 树的方法。
– 利用这种方法,开发人员可以方便地将XML树从一种形状转换为另一种形状。
• 分析字符串
• 从文件加载
3.3. 序列化 XML 树
• XML 树可以序列化为
–字符串
– File
– TextWriter
– XmlWriter
– XmlReader
3.4. LINQ to XML 轴
3.5. 查询与转换 XML 树
• 基本查询
• 使用LINQ查询操作符查询
• 转换XML 格式
• 将集合、数据转换成XML
• 转换成其它数据格式
3.6. 修改 XML 树
• 内存中 XML 树修改与函数构造
• 向 XML 树中添加元素、属性和节点
• 修改XML 树中的元素、属性和节点
• 从XML 树中移除元素、属性和节点
• 维护名称/值对
• 更改整个XML 树的命名空间
4. 实现:生成RSS
NorthwindDataContext db = new NorthwindDataContext();
XElement rssRoot = new XElement("rss",
new XAttribute("version", "2.0"),
new XElement(“channel”,
new XElement("title", "My RSS Feed"),
new XElement("link", "http://weblogs.asp.net"),
new XElement("description", "Northwind Products Feed"),
from product in db.Products
orderby product.ProductName descending
select new XElement("item",
new XElement("title", product.ProductName),
new XElement("link", "p.aspx?id="+product.ProductID),
new XElement("description", "Supplier: " +
product.Supplier.CompanyName)
)
)
);
Response.Write(rssRoot.ToString());