(课件教案)-第二十章-可扩展标记语言(xml).ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《(课件教案)-第二十章-可扩展标记语言(xml).ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课件教案 课件 教案 第二十 扩展 标记 语言 xml
- 资源描述:
-
1、第二十章 可扩展标记语言(XML)本章的学习内容包括六个方面:1 学会使用 XML 标记数据。2 理解 XML 命名空间的概念。3 理解 DTD、架构和 XML 的关系。4 学会创建架构。5 学会创建和使用简单的 XSLT 文档。6 学会使用使用 XslTransform 类将 XML 文档转换成 XHTML。20.1 概述可扩展标记语言(Extensuble Markup Language,XML)于 1996 年由万维网协会(W3C)下属的“XML 工作组”开发的。XML 是可移植的、获得普遍支持的开放(非专利性)技术,可以用于对数据进行描述。XML 正在快速成为程序的数据交换标准。使用
2、XML,文档作者可描述任何类型数据,包括数学公式、软件配置指南、乐谱、菜谱以及财务报表。无论人或机器,都能方便阅读 XML 文档。.NET Framework 广泛运用了 XML。Framework 类库(FCL)提供了和 XML 有关的一系列类。Visual C+.NET 的许多内部实现也利用了 XML。Visual C+.NET 还配备了一个 XML 编译器和校验器。20.2XML 文档本节将通过两个简单的 XML 文档,介绍 XML 文档的组成。第一个 XML 文档描述了一篇文章。注意,为了叙述方便,我们下面的 XML 文档增加了行号(行号不是 XML 文档的内容)。1 23 4 56
3、78 Simle XML910 August 6,200311910 August 6,20031112 13 Su14 Fari15 1617 XML is pretty easy.1819 In this chapter,we present a wide variety of examples20that use XML.21 22 23 分析该 XML 文档是由以下几部分组成的:1 文档的第1行是一个可选的“XML 声明”,它将该文档标识成一个 XML 文档。虽然 XML 声明是可选的,但最好保留;如果不能确切地遵循正确的 XML 版本,会导致不可预测的错误。2 注解行是以 结尾的,几
4、乎可以放在文挡的任何地方。例如:3 使用“标记”(Tag)来标记数据。标记名称要封闭在一对尖括号。标记必须成对使用,以便对字符数据进行定界。例如:Simle XML。注意,结束标记与起始标记的区别仅在于,在字符 之后有一个正斜杠字符。例如文档中的 和 等。4 独立的标记单元(即包括在起始标记和结束标记之间的一切内容)成为“元素”。XML 文档总体上只由一个元素构成,即“根元素”,其中包含了文档中的其他所有元素。根元素必须是 XML 声明之后的第一个元素。例如,本例的 aticle。不同元素可以嵌套,从而形成一个层次结构 根元素位于层次结构的最顶部。这样能使文档的作者在数据之间明确建立关系。例如
5、,title,date,author,summary 和 content 元素都嵌套在 article 内。而 firstName 和 lastName 都嵌套在 author 内。注意,在 XML 文档中创建多个根元素是语法错误。另外,XML 要区分大小写。切记不要将元素名的大小写弄混。为了处理 XML 文档,需要一个“XML 解析器”。该解析器负责检查 XML 文档的语法,并使 XML 文档的数据能由应用程序使用。流行的解析器包括微软的 MSXML、Apache 软件基金会的 Xerces 以及 IBM 的 XML4J 等等。本章使用的是 MSXML。在 IE 中打开 XML 文档后,MS
6、XML 会解析文档,并将解析过的数据传送给 IE。然后,IE 使用一个内建的“样式表”格式化数据。注意下图中的最终数据格式与 XML 文档的原始格式非常相似。正如后面要展示的,为了将 XML 数据转换成合适显示的格式,样式表充当了至关重要的角色。下面展示的是第二个 XML 文档,它标记了一封商务信函。该文档包含了比上一个 XML 文档更多的数据。1 23 4 56 7 8 Jane Doe9 Box 1234510 15 Any Ave.11 Othertown12 Otherstate13 6789014 555-432115 16 1718 19 John Doe20 123 Main S
7、t.21 22 Anytown23 Anystate24 1234525 555-123426 27 2829 Dear Sir:3031 It is our privilege to inform you about our new 32 database managed with XML.This 33 new system allows you to reduce the load on 34 you inventory list server by having the client machine 35 perform the work of sorting and filterin
8、g the data.36 3738 Please visit our Web site for availablity39 and pricing.40 4142 Sincerely4344 Ms.Doe45 根元素 letter(第 645 行)包含子元素 contact(第 716 行和第 1827 行)、salutation(第 29 行)、paragraph(第 3136 行和第 3840 行)、closing(第 42 行)以及 signature(第 44 行)。数据除了能放到标记之间,还可以放到“属性”(attributes)中。所谓属性是指起始标记中的“名称-值”对(名称和值
9、用一个等号“=”来分隔)。每个元素都可在其起始标记中指定任意数量的属性。第一个 contact 元素指定了 type 属性,属性值是“from”,表明该 contact 元素标记了与发信人有关的信息。第二个 contact 元素也指定了 type 属性,属性值是“to”,表明该 contact 元素标记了与收信人有关的信息。和标记名一样,属性名也要区分大小写;可为任意长度;可采用字母、数字、下划线、连字号和句号;但必须以字母或下划线字符开头。salutation 元素标记了信函问候语。paragraph 元素标记了信函正文。closing 和 signature 元素则分别标记了信函作者的结语
10、和签名。注意,属性值必须用双引号(“”)或单引号()来封闭,否则就是语法错误。不能为一个元素指定两个同名属性。本文档的第 15 行引入了名为 flag 的一个“空元素”,它指出联系人的性别。所谓空元素是指不包含字符数据(也就是说,起始和结束标记之间没有文本)的元素。要结束这样的元素,要么在元素末尾插入一个正斜杠,如本文的;要么显式写一个结束标记,例如:。注意,第 21 行的 address2 元素也不包含数据。所以可以将第 21 行安全地修改成。然而,完全省略元素可能不是明智之举,因为某些 DTD(文档类型定义)或者架构需要用到它。这些问题的详细内容将在后面的有关节中讨论。20.3XML 命名
11、空间与.NET Framework 的结构相似,XML 也使用了“命名空间”对 XML 元素进行区分。此外,对于一些基于 XML 的语言(称为“词汇表”),比如,XML 架构语言和可扩展样式表语言等,它们也常常用命名空间来标识自己的元素。元素根据“命名空间前缀”来区分,它标识一个元素从属于哪个命名空间。例如:Visual C+.NET用命名空间前缀 deitel 来限定 book 元素,表明 book 元素是 deitel 空间的一部分。除了保留的命名空间前缀 xml 之外,文档作者可将任何名称作为命名空间前缀使用。注意,以任何大小写组合形式创建名为 xml 的命名空间前缀都是语法错误。下面的
12、 XML 文档中包含了两个 file 元素,它们通过命名空间加以区分。1 23 4 56 89 10 A book list11 1213 14 A funny picture15 16 17 18 注意,属性无需用命名空间前缀加以限定,因为它们肯定与元素联系在一起。第 67 行用 xmlns 属性创建了两个命名空间前缀 text 和 image。每个命名空间前缀都和一系列字符绑定,这些字符构成了“统一资源标识符”(URI)。URI 惟一性地标识了命名空间。文档作者可创建自己的命名空间及 URI。注意,我们是在创建前缀的同一行上使用 text 命名空间前缀。为了确保命名空间的唯一性,作者必须提
13、供不重复的 URI。本例将 urn:deitel:textInfo 和 urn:deitel:imageInfo 作为 URI 使用。一种常见的做法是将 URL 作为 URI 使用。因为 URL 中的域名()肯定是不重复的。例如,第 67 行可以改写成:6 这个例子使用了与 Deitel&Associates 公司域名对应的 URL 来标识命名空间。XML 解析器其实永远不会访问这些 URL 它们只是一系列以示区别的字符。这些 URL 不需要引用实际的网页,甚至不需要具有正确的形式。第 911 行用命名空间前缀 text 来限定元素 file 和 description,表示它们从属于“urn
14、:deitel:textInfo”命名空间。注意,命名空间前缀也要应用于结束标记。第 1316 行将命名空间前缀 text 应用于 file、description 和 size 元素。要想避免为每个标记名都附加命名空间前缀,作者可以指定一个“默认命名空间”。下面的文档演示了默认命名空间。1 23 4 56 89 10 A book list11 1213 14 A funny picture15 16 17 18 默认命名空间应用于 directory 元素以及没有使用命名空间前缀限定的所有元素。但是,也可使用一个命名空间前缀,为特定元素指定一个不同的命名空间。例如,第 13 行为 file
15、 元素附加了 image 前缀,表明它在 urn:deitel:imageInfo 命名空间中而不是在默认命名空间中。20.4 文档对象模型虽然 XML 文档是文本文件,但通过顺序文件访问技术从中获取数据,显得既不实际,效率也不够好,尤其是在需要动态添加或删除数据的时候。一个 XML 文档被成功解析后,解析器会将文档数据按照树结构存储到内存中。下面我们以 article.xml 文档为例讨论文档的树结构。这个层次化的树结构称为“文档对象模型”(Document Object Model,)树,能够创建这类结构的 XML 解析器被称之为“DOM 解析器”。DOM 树将 XML 文档的每个组件(比
16、如 article,date,firstName 等等)表示成树上的一个节点。包含了其他节点的一个节点(如 author)称为“父节点”。具有同一父的节点(比如 firstName 和 lastName)称为“同辈节点”(Sibling Node)。节点的“后辈节点”(Descendant Node)包括:节点的子节点、子节点的子节点类似地,节点的“前辈节点”(Ancestor Node)包括:节点的父节点、父节点的父节点 每个 DOM 树都只有一个“根节点”,它包含了其他所有节点、比如注解和元素。用于创建、读取和操纵 XML 文档的类型定义在 System:Xml 命域空间中。该空间还包含其
17、他命域空间,提供了与 XML 文档有关的其他类。article.xml 文档的 DOM 树如下所示:接下来,本节要展示使用 DOM 树的几个程序实例。articletitledateauthorsummarycontentfirstNamelastName实例1 XmlReaderTest 加载了本章第一个 XML 文档 article.xml,并在一个文本框中按照 DOM 树层次结构显示其中的数据。在该实例中通过创建 XML 文档类型 XmlDocument 的对象,并调用 XmlDocument 类型的方法 Load 将 article.xml 加载到对象中,以便程序读取和处理该 XML
18、文档的数据。读取 XmlDocument 类型对象所加载的数据是由 XmlNodeReader 类型(抽象类型 XmlReader 的派生类)对象通过 Read 方法完成的。本程序只对读取的数据进行类型(元素、注解还是文本)判断。用于判断的数据类型依据是由枚举类型 XmlNodeType 提供的。上述的类型和枚举同属于 System:Xml 命域空间中。为了显示 XmlDocument 类型对象中加载的 XML 文档数据,需要在程序的主窗体中添加一个文本框 TextBox 控件。程序的 GUI 设计如下:编程要点1 由于程序中需要使用 XmlDocument、XmlNodeReader 类型和
19、枚举类型 XmlNodeType,因此程序中需要添加使用这些类型所在的命域空间的语句:using namespace System:Xml;2 在主窗体 Form1 类型中添加一个方法 PrintXml,实现按树形结构显示指定 XML 文件中信息的设计需求。代码如下:void PrintXml()/create and load XML documentXmlDocument document=gcnew XmlDocument();document-Load(Larticle.xml);/create XmlNodeReader for documentXmlNodeReader reade
20、r=gcnew XmlNodeReader(document);/show form before outputTextBox is populatedthis-Show();/tree depth is-1,no indentationint depth=-1;/display each nodes contentwhile(reader-Read()switch(reader-NodeType)/if Element,display its name case XmlNodeType:Element:/increase tab depthdepth+;TabOutput(depth);ou
21、tputTextBox-AppendText(String:Concat(LName,Lrn);/if empty element,decrease depthif(reader-IsEmptyElement)depth-;break;/if Comment,display it case XmlNodeType:Comment:TabOutput(depth);outputTextBox-AppendText(String:Concat(LValue,L-rn);break;/if Text,display it case XmlNodeType:Text:TabOutput(depth);
22、outputTextBox-AppendText(String:Concat(Lt,reader-Value,Lrn);break;/if XML declaration,display it case XmlNodeType:XmlDeclaration:TabOutput(depth);outputTextBox-AppendText(String:Concat(LName,L,reader-Value,L?rn);break;/if EndElement,display it and decrement depth case XmlNodeType:EndElement:TabOutpu
23、t(depth);outputTextBox-AppendText(String:Concat(LName,Lrn);depth-;break;/end switch /end while/end method PrintXml其中辅助方法 TabOutput 用于在输出的文本中加入 Tab 转移字符,以便表示文本信息的层次关系。代码如下:void TabOutput(int number)for(int i=0;i AppendText(Lt);/end method TabOutput3 在 Form1 的构造函数中添加调用 PrintXml 方法的语句:Form1(void)Initia
24、lizeComponent();PrintXml();4 添加主窗体大小变化事件的处理方法 Form1_SizeChanged,以便在主窗体大小发生变化时,文本框控件的大小依据主窗体的大小发生相应的变化。代码如下:System:Void Form1_SizeChanged(System:Object sender,System:EventArgs e)outputTextBox-Size=this-Size;实例的运行结果如下:实例2 XmlDOM 演示了如何通过程序来操纵 DOM 树。该程序首先将 XML 文件 letter.xml 加载到一个 XmlDocument 类型对象中,然后依据
25、XML 数据的 DOM 树层次结构,将 XmlDocument 类型对象中的数据复制到另一个 XmlDocument 类型对象中,并在复制操作的同时创建一个树形视图显示中数据的树形结构关系。程序还允许将复制得到的 XmlDocument 类型对象中的数据以非树形结构格式的文本显示,同时将这些数据写到一个新建的 XML 文件中。程序的 GUI 设计如下:其中添加的三个按钮(Button)控件、一个树形视图(TreeView)控件和一个文本框控件(TextBox)的用途如下:控件标题控件对象名用途BuildbuildButton发出复制源 XML 文件对象到目标 XML 文件对象,并创建显示数据的
展开阅读全文