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

ASP.NET
LINQ学习笔记:元素操作符
LINQ学习笔记:聚合方法
LINQ学习笔记:量词
LINQ学习笔记:创建方法
LINQ学习笔记:LINQ to XML
LINQ学习笔记:X-DOM概览
LINQ学习笔记:实例化一个X-DOM
LINQ学习笔记:导航和查询X-DOM
LINQ学习笔记:更新一个X-DOM
LINQ学习笔记:string类型的Value属性
LINQ学习笔记:XML命名空间
LINQ学习笔记:投射到X-DOM
C#教程:声明和调用扩展方法
C#教程:没有扩展方法的日子
C#教程:lambda表达式转换成表达式树
C#教程:编程方式构建表达式树
C#教程:使用lambda表达式记录事件日志
C#教程:作为委托的Lambda表达式
C#教程:关于匿名类型的特性
C#教程:隐式类型数组

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


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

待续!