了解 XML实现通用的数据访问(2)_Xml教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:XML卷之实战锦囊(1)——动态排序
排序功能让我们页面上的数据显的更人性化,是我们在网站上见过的很普遍的一个功能效果了。以往的自动排序都是用大量的脚本代码来完成的,对一般的爱好者来说这是件困难的事情。然而用XML来处理

XML 信息集

W3C XML Information Set 推荐描述了 XML 文档的抽象表现形式。XML 信息集主要用作各种 XML 技术使用的定义集,以正式描述需要技术处理的 XML 文档部分。有几种 W3C XML 技术是按照 XML 信息集进行描述的,包括 SOAP 1.2、XML 架构和 XQuery。

XML 信息集是 XML 文档的树状层次表示。一个 XML 文档的信息集包含许多信息项,这些信息项是 XML 文档组件的抽象表示,其中包括表示文档、文档的元素、属性、处理指令、注释、字符、表示法、命名空间、未分析的实体、未扩展的实体引用和文档类型声明的信息项。XML 信息集是被正式推荐的机制,通过它来定义 XML 文档中应被重视的重要信息。例如,信息集不区分空元素的两种形式。因此根据 XML 信息集,以下两种表示方法

<test></test>

<test/>

是相同的。同样,属性所使用的引号类型也不重要,因此根据 XML 信息集,元素

<test attr='value'/>

<test attr="value"/>

是相同的。XML 信息集认为不重要的 XML 1.0 语法内容列表在 W3C XML Information Set 推荐的附录 D 中提供。

XML Information Set 推荐介绍了“综合信息集 (Synthetic Infosets)”的概念。所谓综合信息集是指除使用分析文本形式的 XML 文档之外还用其他方法创建的信息集。综合信息集为使用 XML 技术处理非 XML 数据奠定了基础,当然前提是此类数据可以映射到 XML 信息集。处理综合信息集的一个示例是 ObjectXPathNavigator,它允许用户在 .NET Framework 中使用 Xpath 查询对象,或者使用 XSLT 转换对象。

架构语言

XML 架构语言用于描述 XML 文档的结构和内容。例如,可以使用架构指定文档中包含一个或多个compact-disc元素,而每个compact-disc元素都包含子元素price、title和artist。在交换文档的过程中,XML 架构可以描述 XML 生成程序与使用程序之间的约定,因为它描述了这二者之间的有效 XML 消息的组成。虽然存在大量用于 XML 的架构语言,从 DTD 到 XDR,但目前最权威的是 W3C XML 架构定义语言,通常简称为 XSD。

XSD 在 XML 架构语言中是独一无二的,因为它最先尝试扩展 XML 架构的作用,使之不再局限于仅用来描述两个实体交换文档时的约定。XSD 引入了“后架构验证信息集 (Post Schema Validation Infoset,PSVI)”的概念。一个完整的 XSD 处理器接受 XML 信息集作为输入,并在验证时将其转换为后架构验证信息集 (PSVI)。PSVI 是初始的输入 XML 信息集,带有添加的新信息项和添加到现有信息项中的新属性。W3C XML Schema 推荐列出了后架构验证的信息集的组成要素。

类型注释是 PSVI 组成要素中很重要的一类。元素和属性需进行严格的类型定义,并具有与之相关的数据类型信息。经过严格类型定义的 XML 有很多用途,可以使用 .NET Framework 的 XmlSerializer 等技术将其映射到对象,可以使用 SQLXML 和 .NET Framework 的 DataSet 技术将其映射到关系表格,或者使用利用了严格类型机制的 XML 查询语言,如 XPath 2.0 和 XQuery 对其进行处理。

以下示例是一个架构片段,描述了 XML 文档剖析 一节中示例文档的items元素。

以下为引用的内容:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="items">
<xs:complexType>
<xs:sequence>
<xs:element ref="compact-disc" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="compact-disc">
<xs:complexType>
<xs:sequence>
<xs:element name="price" type="xs:decimal" />
<xs:element name="artist" type="xs:string" />
<xs:element name="title" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>

</xs:schema>

基于树模型的 API

树模型 API 将 XML 文档呈现为由节点组成的树,这个树通常可以立即加载到内存中。最常用的 XML 树模型 API 是 W3C 文档对象模型 (DOM)。DOM 支持以编程方式读取、处理和修改 XML 文档。

以下示例使用 .NET Framework 中的 XMLDocument 类获取items元素中第一个compact-disc的艺术家姓名和标题。

以下为引用的内容:

using System;
using System.XML;

public class Test{

public static void Main(string[] args){

XmlDocument doc = new XMLDocument();
doc.Load("test.XML");

XmlElement firstCD = (XMLElement) doc.DocumentElement.FirstChild;
XMLElement artist =
(XMLElement) firstCD.GetElementsByTagName("artist")[0];
XMLElement title =
(XMLElement) firstCD.GetElementsByTagName("title")[0]

Console.WriteLine("Artist={0}, Title={1}", artist.InnerText, title.InnerText);
}
}

基于游标的 API

XML 游标 API 就像在 XML 文档中移动的镜头,对准被定向的文档的各个方面。.NET Framework 中的 XPathNavigator 类就是一个 XML 游标 API。XML 游标 API 与树模型 API 相比,具有不必将整个文档加载到内存中的优势,这样便于对 XML 生成程序中按需生成文档的部分进行优化。

以下示例使用 .NET Framework 中的 XPathNavigator 类获取items元素中第一个compact-disc的艺术家姓名和标题。

以下为引用的内容:

using System;
using System.XML;
using System.XML.XPath;

public class Test{

public static void Main(string[] args){

XmlDocument doc = new XMLDocument();
doc.Load("test.XML");

XPathNavigator nav = doc.CreateNavigator();

nav.MoveToFirstChild(); //从根节点移至文档元素 (items)
nav.MoveToFirstChild(); //从 items 元素移至第一个 compact-disc 元素

//从 compact-disc 元素移至 artist 元素
nav.MoveToFirstChild();
nav.MoveToNext();
string artist = nav.value;

//从 artist 元素移至 title 元素
nav.MoveToNext();
string title = nav.value;

Console.WriteLine("Artist={0}, Title={1}", artist, title);
}
}

流式 API

使用处理 XML 的流式 API 时,用户只需在内存中存储要处理的当前节点的上下文,即可处理 XML 文档。此类 API 可以处理大型的 XML 文件,而不会占用庞大的内容空间。用于 XML 处理的流式 API 主要有两种类型:基于推进的 XML 分析器和基于拉出的 XML 分析器。

基于推进的分析器(如 SAX)的工作方式是在 XML 数据流中移动,并在遇到 XML 节点时将事件“推进”到已注册的事件处理程序(回调方法)。基于拉出的分析器(如 .NET Framework 中的 XmlReader 类)则在 XML 数据流中用作只向前的游标。

以下示例使用 .NET Framework 中的 XMLReader 类获取items元素中第一个compact-disc的艺术家姓名和标题。

以下为引用的内容:

using System;
using System.XML;

public class Test{

public static void Main(string[] args){

string artist = null, title = null;
XmlTextReader reader = new XmlTextReader("test.XML");

reader.MoveToContent(); //move from root node to document element (items)

/* 保持读取,直至获得第一个 <artist> 元素 */
while(reader.Read()){

if((reader.NodeType == XMLNodeType.Element) && reader.Name.Equals("artist")){

artist = reader.ReadElementString();
title = reader.ReadElementString();
break;
}
}
Console.WriteLine("Artist={0}, Title={1}", artist, title);
}
}

分享:利用XML开发留言板简单的例子
XML是一种基于文本格式的元标记语言,它注重对数据结构和数据意义的描述,实现了数据内容和显示样式的分离(xml xsl),而且是与平台无关的。 由于XML注重数据内容的描述,因而,对于数据的检

来源:模板无忧//所属分类:Xml教程/更新时间:2008-08-22
相关Xml教程