使用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());

 

posted @ 2017-09-09 22:38  tiger_yj  阅读(201)  评论(0编辑  收藏  举报