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

ASP.NET
如何在ASP.NET中使用SmtpMail发送邮件
在VB.NET中利用Split和Replace函数计算字数
Attribute应用:简化ANF自定义控件初始化过程
ASP.NET 2.0移动开发入门之使用样式
ASP.NET 2.0中使用OWC生成图表
ASP.NET 2.0中控件的简单异步回调
一个无法捕获ADO.NET Dataset的内存错误
深入解读ADO.NET2.0的十大最新特性
.Net平台下的分布式缓存设计
ASP.NET全局异常处理浅析
ASP.NET 2.0中文验证码的实现
浅析.NET平台编程语言的未来走向
.net 框架程序设计收藏
使用ASP.NET MVC Futures 中的异步Action
详解.NET中的XmlReader与XmlWriter
关于.NET中的Server push技术
asp.net页面执行机制
对比JSP和ASP.NET的存储过程
.NET 4.0不会包含System.Shell.CommandLine
ASP.NET十个有效性能优化的方法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 142 ::
收藏到网摘: 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参数.

待续!