当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > LINQ学习笔记:X-DOM概览

ASP.NET
asp.net css注释的影响
ASP.NET与数据库相关技巧
关于HtmlForm控件
三色交替的下拉列表框
精通ASP.NET中弹出窗口技术
ASP.NET Forums与现有系统整合方案示例
ASP.NET操作IIS中的虚拟目录
DataGrid与SQL Server 2000数据绑定
如何让Web应用程序在Client端实现导出报表功能
如何保证web app中的Send Email线程稳定性
关于用ASP.Net识别远程主机服务器种类
ASP.NET中上传下载文件
提高ASP.NET性能的方法
asp.net StreamReader 创建文件
asp.net如何生成图片验证码(简单)
一个.net 压缩位图至JPEG的代码
简单的SQL Server数据库数据读取与数据操作
获取网站的RSS聚合到自己的网页
.Net程序中整站通用的防SQL注入函数
asp.net生成缩略图及给原始图加水印的函数

ASP.NET 中的 LINQ学习笔记:X-DOM概览


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 157 ::
收藏到网摘: n/a

X-DOM概览

X-DOM的核心类型. XElement是所有这些类型当中最常用的. XObject是整个继承体系中的根源; XElement和XDocument是整个箱体层级的根.

考察下面的代码:

 1: string xml =
 2: @"<customer id='123' status='archived'>
 3: <firstname>Joe</firstname>
 4: <lastname>Bloggs<!--nice name -></lastname>
 5: </customer>";
 6:
 7: XElement customer = XElement.Parse (xml);

XObject是所有XML内容的抽象基类. 它定义了一个指向父元素的连接以及一个可选的XDocument.

XNode是除开属性(attributes)之外的多数XML内容的基类. 一个区别就是XNode可以处理一个有序的混合类型的XNode的集合, 考虑下面的XML片段:

 1: <data>
 2: Hello world
 3: <subelement1/>
 4: <!--comment-->
 5: <subelement2/>
 6: </data>

在父元素<data>里面, 第一个节点是一个XText(Hello world), 接着是一个XElement节点, 然后是一个XComment节点, 最后是另外的一个XElement节点. 相反的, 一个XAttribute只能配对出现.

虽然一个XNode能够访问它的父元素, 但它并没有子节点的概念; 这是它的子类型XContainer的工作. XContainer定义了一些用于处理子节点的成员并且它也是XElement和XDocument的抽象基类.

XElement引入了一些管理attributes的成员例如Name和Value. 对于那种元素只拥有一个单一的XText子节点的情况, Value属性可以读取或者设置子节点的内容, 而不再需要不必要的导航. 感谢Value, 大多数情况下你可以避免和XText节点直接打交道.

XDocument表示一棵XML树的根. 更精确的说, 它包装了根元素, 增加了一个XDeclaration, 处理指令, 以及其它的根级别的相关操作. 不像W3C DOM, 它的使用是可选的, 你甚至可以在没有创建XDocument的时候加载, 操作, 或者保存一个X-DOM. 对于XDocument的非依赖意味着你可以高效而简易的将一个字节点树移到另外一个X-DOM层级上面.

加载与解析

XElement与XDocument两者都提供了静态Load和Parse的方法从一个已存在的数据源中来构建一棵X-DOM树.

  • Load从文件, URI, TextReader或者XMLReader创建X-DOM
  • Parse从一个string创建了X-DOM

XNode也提供了一个ReadFrom的静态方法, 该方法实例化来自于XmlReader的任何节点类型. 不像Load, 它读取了一个节点之后就立即停止, 你可以通过手动读取XmlReader来继续进行处理. 另外你也可以反向操作, 使用一个XmlReader(CreateReader)或者XmlWriter(CreateWriter)来读/写一个XNode.

例如:

 1: XDocument fromWeb = XDocument.Load
 2: ("http://albahari.com/sample.xml");
 3:
 4: XElement fromFile = XElement.Load
 5: (@"e:mediasomefile.xml");
 6:
 7: XElement config = XElement.Parse (
 8: @"<configuration>
 9: <client enabled='true'>
 10: <timeout>30</timeout>
 11: </client>
 12: </configuration>");

保存与序列化

在任何节点上调用ToString都会将其内容转换成一个XML字符串-该字符串就像我们看到的那样已经被断行符格式化过了.(我们还可以在调用ToString的时候指定SaveOptions.DisableFormatting, 这样将禁用格式化断行符)

同时XElement和XDocument也提供了一个Save方法用于将一个X-DOM写入到文件中, TextWriter 或者 XmlWriter. 如果你选择了使用文件, 那么XML declaration将会被自动写入. 另外XNode也包含了一个WriteTo的方法, 其接收一个XmlWriter参数.

待续!