通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 MY小屋
联系我们
设为首页
加入收藏

 

QQ,ASP,PHP,JSP,XML,SQL,.Net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>编程开发>>XML专区>>正文 新版上线![旧版]
注:打开慢时请稍等

运用数据链路来显示XML文件(一)

http://www.iyit.net  日期:2006-5-24 12:00:50  来源:整理转载   点击:
参加讨论】    数据链路是你学习从传统HTML 网页中显示XML 文件的第一项技术。从HTML 网页中显示XML文件赋予你两者的优点:XML 文件中的数据储存,以及建构数据与卷标信息片段上的弹性规则,加上HTML 已建构了丰富的格式,与强有力的可程序化特性。
    在数据链路中,你将XML文件链接到HTML网页,然后将标准的HTML元素,如SPAN或TABLE,结合到个别的XML 元素中。HTML 元素接着会自动显示它们所连结的XML 元素的内容。
    数据链路,就像你在本章中学到的相关技术一样,只有当XML 文件是以对称型式建构才会有效,就像典型的数据库一样-意即,文件的元素可以被解释成一组纪录与字段的集合。在最简单的型式里,这样的文件是由一个包含一连串相同型式元素(数据纪录)的根元素组成,每一个元素拥有一组相同的子元素,全都包含字符数据(数据域位)。Inventory.xml 文件就是这样的一个范例,你将在列表8-1 中看到这份文件,文件里面的BOOK 元素可以当作数据记录,而套迭在每一个BOOK 元素(TITLE、AUTHOR 等等)中的元素则被视为数据域位。在本章的稍后,你将学习更多有关适合数据链路的特殊文件结构的知识。而对于不适用数据链路的文件,你可以使用你将在第九章中探索的scripting 技术。
    在本章中,首先你将获得数据链路两个主要步骤的概论。接着你将详细地学习如何将XML 文件链接到HTML 网页(第一个主要步骤),以及如何将HTML 元素与XML 元素及属性连结(第二个主要步骤)。最后,你将学习如何运用与数据链路相同的底层可程序化对象(即数据来源对象-DSO)来设计一个网站。你将使用这些script 结合数据链路,或者是单独使用script。在第九章中,你将接着学习一种完全不同的方法来从传统的HTML 网页中使用、管理与显示XML文件。该技术将让你颠覆整个XML 文件的逻辑结构,而且你可以将之与任何型式的XML 文件一起使用。
    提示
    更多有关数据链路与作为基础的DSD 的信息,请参阅下列网页, http://msdn.microsoft.com/xml/xmlguide/xmldso.asp ,这是由Microsoft Developer Network(MSDN)所提供。

主要的步骤

    使用数据链路有两个主要步骤:
    1. 将XML 文件连结到你欲显示XML 资料的HTML 网页上 。这个步骤通常是借着将一个名为XML 的HTML 元素包含在HTML 网页中。例如,下面位于HTML 网页中的元素将XML 文件Book.xml 链接到网页上:
<XML ID="dsoBook" SRC="Book.xml"></XML>
    2. 将HTML 元素与XML 元素连结 。当你将HTML 元素连结到XML 元素时,HTML元素会自动显示XML 元素的内容。例如,下面位于HTML 网页中的SPAN 元素,被连结到位于被链接XML 文件中的AUTHOR 元素:
<SPAN DATASRC="#dsoBook" DATAFLD="AUTHOR"></SPAN>
    结果,SPAN(HTML 元素)会显示AUTHOR(XML 元素)的内容。数据链路的基本技巧实际上就是这么简单,然而你将学到该技巧的许多变化。接下来的部分详细地涵盖了这两个步骤。

第一步:将XML 文件链接到HTML 网页

    要将XML 文件显示在HTM 网页中,你必须将XML 文件链接到该HTML 网页。利用MicrosoftInternet Explorer 5 最简单的方法就是将名为XML 的HTML 元素放置于浏览器中,这个元素也称为data island(资料岛)。你可以使用两种不同的data island 型式。
    第一种data island 是将XML 文件的全部文字放在起始卷标与结束卷标之间。下面HTML 网页中的data island 就是一个例子:
<HTML>
<HEAD>
<TITLE>Book Description</TITLE>
</HEAD>
<BODY>
<XML ID="dsoBook">
<?xml version="1.0"?>
<BOOK>
<TITLE>The Adventures of Huckleberry
Finn</TITLE>
<AUTHOR>Mark Twain</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>298</PAGES>
<PRICE>$5.49</PRICE>
</BOOK>
</XML>
<!--other HTML elements ...-->
</BODY>
</HTML>
    在第二种data island 中,将名为XML 的HTML 元素维持空白,并且只包含XML 文件的URL。下面HTML 网页中的data island 就是一个例子:
<HTML>
<HEAD>
<TITLE>Book Description</TITLE>
</HEAD>
<BODY>
<XML ID="dsoBook" SRC="Book.xml"></XML>
<!--other HTML elements...-->
</BODY>
</HTML>
    在前面的范例中,XML 文件的文字将被包含在个别的Book.xml 档案中:
<?xml version="1.0"?>
<!--File Name:Book.xml -->
<BOOK>
<TITLE>The Adventures of Huckleberry Finn</TITLE>
<AUTHOR>Mark Twain</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>298</PAGES>
<PRICE>$5.49</PRICE>
</BOOK>
    第二种data island 型式遵守了更多保持数据本身(XML 文件)与排版及处理信息(样式表,或本章中的HTML 网页)分开的XML 规则。尤其是,第二种格式让维护XML 文件,特别是显示于不同HTML 网页中的同一文件,变得更为容易。因此,在本书的范例中你将只看到第二种dataisland。
注意
    虽名为XML,但用来建构data island 的元素本身并不是XML 元素。相反地,它是包含了XML元素的HTML 元素。因此,为空白元素运用XML 的快捷语法,<XML ID="dsoBook" SRC="Book.xml" />,将会造成不合法。
    你可以为data island 的ID 属性指定一个唯一的识别代号,让你用来在HTML 网页中存取XML文件。(在前面的范例中,将ID 的值设为「dsoBook」。)在第二种data island 中,你要为SRC 属性指定包含XML 数据的档案的URL。你可以使用完全标准的URL,如下面范例所示:
<XML ID="dsoBook" SRC="http://www.my_domain.com/documents/Book.xml">
</XML>
    然而,大多数的时候你是使用局部的URL,该URL 指定了一个相对于包含data island 的HTML网页位置的相对位置。例如,下面的data island 中的SRC 属性表明Book.xml 是位在与HTML网页所在相同的网页:
<XML ID="dsoBook" SRC="Book.xml"></XML>
    相对的URL 比较常见,因为XML 文件通常被放在与HTML 网页所在相同的目录,或者是在其子目录中。

如何储存XML 的数据

    当Internet Explorer 5 开启HTML 网页时,IE5 的内建XML 处理器会读取并解析XML 文件。Internet Explorer 5 也会建立一个可程序化对象,称为数据来源对象(Data Source Object,DSO),负责储存或快取储存XML 的数据,并提供对这些数据的存取。DSO 将XML 数据储存成纪录集-意即,记录与字段的集合。例如,如果你将Inventory.xml 文件包含在网页中作为data island(如列表8-1 所示),DSO 会储存每一个BOOK 元素当作元素,并且将BOOK 元素的每一个子元素(TITLE、AUTHOR 等等)当作字段。
    当你将HTML 元素与XML 元素连结,DSO 会自动提供XML 元素的值并处理全部细节工作。DSO 也让你透过一组方法、属性及事件,来直接存取与管理储存的数据集。方法(method)就是让你可以从网页呼叫来存取或修改记录集的函式。(例如,你可以使用方法在记录集中进行移动。)属性(Properties)则是目前的特性设定,你可以从网页中读取与修改这些设定。(例如,你可以读取一个在你抵达最后一笔数据时通知你的属性。)而事件(events)则是你可以从含括在网页中的script 函式来进行处理的状况发生(如纪录值的改变)。
    在网页中,你在data island 中为ID 属性设定的识别代号代表DSO。(在前面章节的范例中,识别代号为dsoBook。)

检查XML 的错误

    如同你在前面章节中所看到的,如果你直接在Internet Explorer 5 中开启XML 文件(无论伴不伴随着样式表),浏览器会检查文件是否为格式正确的。如果发生了任何违反格式正确的错误,它会停止文件的显示并出现一个毁灭性错误讯息,该讯息可以帮助你除错。
    当你透过HTML 网页中的data island 来显示XML 文件,Internet Explorer 5 会检查文件是否有违反格式正确性的缺失,以及不符合有效性规则的错误-如果文件包含了文件型态的宣告的话。然而,如果文件内含错误,Internet Explorer 5 只是无法显示XML 资料,而不会出现错误讯息。在链接的XML 文件中要查看任何错误的辅助叙述,你可以使用在第九章<检查XML 文件的有效性>章节所给与的有效性与格式正确的查核script 来测试文件。

第二步:将HTML 元素连结到XML 元素

    你可以利用两种方法将HTML 元素连结到XML 元素:
    表格式数据链路 ,代表将HTML 的TABLE 元素连结至XML 数据,好让表格能自动地显示属于XML 文件纪录的整个集合。
    单一纪录数据链路 ,代表将非表格式的HTML 元素(例如,SPAN 元素)联结到XML 元素,如此一次只有一笔记录被显示。
    接下来的章节会详细地讨论这两种技术。

使用表格式数据链路

    要显示由一连串的记录(如列表8-1 中显示的Inventory.xml)所组成的XML 文件,最简单的方法就是将HTML 的TABLE 元素连结至XML 数据,以便让表格能自动一次显示全部的数据记录(或者是一次显示一页的资料,如果你启动分页的功能的话)。利用这种方法,Internet Explorer5 会帮你处理所有的程序;你不需撰写程序或呼叫方法。(但假使你选择了分页功能,就必须自己动手含括一些方法呼叫,本章稍后将介绍这种情况的处理方式。)
    你可以使用单一HTML 表格来显示以简单记录集型式建构的XML 文件,或者是你可以使用巢状套迭的HTML 表格来显示包含阶层式纪录集(本章稍后将介绍这个更复杂的数据记录结构)的XML 文件。接下来的章节会详细地解释这两种显示纪录集的方法。

使用个别的HTML 表格来显示简单的纪录集

    你可以使用个别的HTML 的TABLE 元素来显示XML 文件,在该文件中资料被安排成简单的纪录集-即,以下列方式建构的XML 文件:
    根元素包括了一连串的record 元素,全部都是相同的型式。(本章有时将记录元素简称为record。)
    每一个记录元素包含了同一组的field 元素。(本章有时将字段元素简称field。)
    每一个字段元素只包含字符数据。(如果记录元素的子元素包含了一个或多个自己专有的子元素,DSO 将之视为巢状的记录,而不是字段。你将在本章稍后的<使用巢状表格来显示阶层式纪录集>中学习如何显示巢状元素。)
    Inventory.xml 就是这种型式的HTML 文件的范例,你可以在前面章节中找到它,而且在列表8-1 中也有提供。(你可在随书光盘中找到这份档案。)在这份文件中,根元素(INVENTORY)包含了一组八个元素(BOOK 元素),而且每一笔记录元素拥有相同一组字段元素,这些字段元素只包含字符数据。(TITLE、AUTHOR、BINDING、PAGES 与PRICE)
Inventory.xml
<?xml version="1.0"?>
<!--File Name:Inventory.xml -->
<INVENTORY>
<BOOK>
<TITLE>The Adventures of Huckleberry Finn</TITLE>
<AUTHOR>Mark Twain</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>298</PAGES>
<PRICE>$5.49</PRICE>
</BOOK>
<BOOK>
<TITLE>Leaves of Grass</TITLE>
<AUTHOR>Walt Whitman</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>462</PAGES>
<PRICE>$7.75</PRICE>
</BOOK>
<BOOK>
<TITLE>The Legend of Sleepy Hollow</TITLE>
<AUTHOR>Washington Irving</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>98</PAGES>
<PRICE>$2.95</PRICE>
</BOOK>
<BOOK>
<TITLE>The Marble Faun</TITLE>
<AUTHOR>Nathaniel Hawthorne</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>473</PAGES>
<PRICE>$10.95</PRICE>
</BOOK>
<BOOK>
<TITLE>Moby-Dick</TITLE>
<AUTHOR>Herman Melville</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>724</PAGES>
<PRICE>$9.95</PRICE>
</BOOK>
<BOOK>
<TITLE>The Portrait of a Lady</TITLE>
<AUTHOR>Henry James</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>256</PAGES>
<PRICE>$4.95</PRICE>
</BOOK>
<BOOK>
<TITLE>The Scarlet Letter</TITLE>
<AUTHOR>Nathaniel Hawthorne</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>253</PAGES>
<PRICE>$4.25</PRICE>
</BOOK>
<BOOK>
<TITLE>The Turn of the Screw</TITLE>
<AUTHOR>Henry James</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>384</PAGES>
<PRICE>$3.35</PRICE>
</BOOK>
</INVENTORY>
    当你将表格连结至XML 文件,属于每一个记录元素的数据会被显示在表格不同的列中,而记录元素的每一个子字段元素则是显示于不同的栏中。
    如同范例,列表8-2 中的HTML 网页包含一个表格,该表格连结到列表8-1 中Inventory.xml 文件中的数据。(你可在随书光盘中的Inventory Table.htm 中找到。)
Inventory Table.htm
<!--File Name:Inventory Table.htm -->
<HTML>
<HEAD>
<TITLE>Book Inventory</TITLE>
</HEAD>
<BODY>
<XML ID="dsoInventory" SRC="Inventory.xml"></XML>
<H2>Book Inventory</H2>
<TABLE DATASRC="#dsoInventory" BORDER="1" CELLPADDING="5">
<THEAD>
<TH>Title</TH>
<TH>Author</TH>
<TH>Binding</TH>
<TH>Pages</TH>
<TH>Price</TH>
</THEAD>
<TR ALIGN="center">
<TD><SPAN DATAFLD="TITLE"
STYLE="font-style:italic"></SPAN></TD>
<TD><SPAN DATAFLD="AUTHOR"></SPAN></TD>
<TD><SPAN DATAFLD="BINDING"></SPAN></TD>
<TD><SPAN DATAFLD="PAGES"></SPAN></TD>
<TD><SPAN DATAFLD="PRICE"></SPAN></TD>
</TR>
</TABLE>
</BODY>
</HTML>
    列表8-1 的XML 文件透过网页里面的一个ID 为dsoInventory 的data island,而链接到列表8-2的HTML 网页:
<XML ID="dsoInventory" SRC="Inventory.xml"></XML>
    借着将网页中TABLE 元素的DATASRC 属性设定成data island 的ID,以一个算数符号(#)字符作为开头,TABLE 元素会被连结到整个XML 文件中:
<TABLE DATASRC="#dsoInventory" BORDER="1" CELLPADDING="5">
    表格是以一个标准的标题(THEAD 元素)与一个列(TR 元素)定义。列中的每一个栏(即每一个TD 元素)包含了一个SPAN 元素,该SPAN 元素被连结至XML 文件的字段中以便让元素能够显示字段的内容。例如,第一个栏包含了一个连结到TITLE 字段的SPAN 元素:
<TD><SPAN DATAFLD="TITLE"
STYLE="font-style:italic"></SPAN></TD>
    SPAN 元素借着将字段的名称设定到元素的DATAFLD 属性中(在这个范例中,是TITLE),而连结到XML 字段。
    下面是数据链路运作的模式:虽然TABLE 元素只定义了单一列,当浏览器显示该表格时,它会为XML 文件中的每一笔记录重复显示列元素。即,紧随标题的第一列显示了属于第一笔记录(为The Adventures of Huckleberry Finn 的BOOK 元素)的字段(TITLE、AUTHOR 等等)。接下来的列则为第二笔记录(为Leaves of Grass 的BOOK 元素),第三笔记录等等显示字段。下面是在Internet Explorer 5 中文件看起来的样子:

    你可能会怀疑为什么栏(TD)元素不直接连结到XML 字段呢。原因是TD 元素并不是一个可连结的HTML 元素。(位于295 页中的表格8-1 列出了可连结的元素。)因此,你需要包含一个可连结的元素,通常是SPAN,在每一个TD 元素中。
提示
     要获得更多于第五章中介绍的操作HTML 与DHTML 相关信息,请参阅MSDN上 http://msdn.microsoft.com/workshop/author/default.asp 所列举的网站。若要参考官方的HTML 规格,请参阅WorldWide Web Consortium (W3C) 网站 http://www.w3.org/TR/REC-html40/ 所提供的信息。

使用分页(Paging)功能

    如果XML 文件包含了许多记录,你可以使用分页(paging)以一次一个群组的方式显示纪录,而不是一次将全部的记录显示在冗长的表格中。要为特定被连结的表格启动分页功能,请执行下列步骤:
    1. 将被连结的TABLE 元素的DATAPAGESIZE 属性设定成你希望一次显示的最多记录个数。即记录的每个分页最多会包含你所指定的记录数目。例如,下面TABLE元素的起始卷标为DATAPAGESIZE 属性指定了5 作为属性值,这样会致使表格一次只显示5 笔记录:
<TABLE DATASRC="#dsoInventory" DATAPAGESIZE="5">
    2. 为TABLE 元素的ID 属性指定一个唯一的识别代号,如下面起始标签所示:
3. <TABLE ID="InventoryTable" DATASRC="#dsoInventory"
DATAPAGESIZE="5">
    4. 要在记录间浏览,可以呼叫下表中TABLE 元素的方法。注意,范例在最后一行的呼叫是假设表格拥有InventoryTable 的ID 值。
TABLE 元素的方法 影响 呼叫范例
firstPage 显示记录的第一页 InventoryTable.firstPage()
previousPage 显 显示记录的前一页 InventoryTable.previousPage()
nextPage 显示记录的下一页 InventoryTable.nextPage()
lastPage 显示记录的最后一页 InventoryTable.lastPage()
    如果目前正在显示第一页,呼叫previousPage 方法会被忽略,不进行动作;若是正在显示最后一页,呼叫nextPage 方法也会被忽略。你可以使用script 呼叫这些方法的任何一个(如同本章稍后将讨论的)。然而,最简单的方式,就是将方法设定到HTML 中BUTTON 元素的ONCLICK属性中,如下所示:
<BUTTON ONCLICK="InventoryTable.nextPage()">Next Page</BUTTON>
    该元素显示一个按钮。当使用者按下按钮,被指定到ONCLICK 属性的方法-InventoryTable.nextPage,会被呼叫。
    列表8-3 与8-4 显示了分页的技术。列表8-3 是列表8-1 中显示的Inventory.xml 文件的延伸版本。而列表8-4 则是一个HTML 网页,负责将这份XML 文件显示于其DATAPAGESIZE 属性被设定成「5」的表格中。(你将可在随书光盘的Inventory Big.xml 与Inventory Big Table.htm 档案中找到。)
    在网页的顶端有4 个BUTTON 元素,每一个按钮会执行表格的分页方法。当你初次开启网页,表格会显示前5 笔记录。按下 Next Page 按钮会显示下5 笔记录(若是在记录的结束部分,则还是显示原本的五笔数据),而按下 Previous 按钮则会显示前5 笔记录(若在记录起始部分,则还是原来的前5 笔纪录)。按下 First Page 或 Last Page 按钮则是显示最前面5 笔或最后面5 笔记录。下面是列表8-4 被开启于Internet Explorer 5 中看起来的样子:

Inventory Big.xml
<?xml version="1.0"?>
<!--File Name:Inventory Big.xml -->
<INVENTORY>
<BOOK>
<TITLE>The Adventures of Huckleberry Finn</TITLE>
<AUTHOR>Mark Twain</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>298</PAGES>
<PRICE>$5.49</PRICE>
</BOOK>
<BOOK>
<TITLE>The Adventures of Tom Sawyer</TITLE>
<AUTHOR>Mark Twain</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>205</PAGES>
<PRICE>$4.75</PRICE>
</BOOK>
<BOOK>
<TITLE>The Ambassadors</TITLE>
<AUTHOR>Henry James</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>305</PAGES>
<PRICE>$5.95</PRICE>
</BOOK>
<BOOK>
<TITLE>The Awakening</TITLE>
<AUTHOR>Kate Chopin</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>195</PAGES>
<PRICE>$4.95</PRICE>
</BOOK>
<BOOK>
<TITLE>Billy Budd</TITLE>
<AUTHOR>Herman Melville</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>195</PAGES>
<PRICE>$4.49</PRICE>
</BOOK>
<BOOK>
<TITLE>A Connecticut Yankee in King Arthur's
Court</TITLE>
<AUTHOR>Mark Twain</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>385</PAGES>
<PRICE>$5.49</PRICE>
</BOOK>
<BOOK>
<TITLE>Joan of Arc</TITLE>
<AUTHOR>Mark Twain</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>465</PAGES>
<PRICE>$6.95</PRICE>
</BOOK>
<BOOK>
<TITLE>Leaves of Grass</TITLE>
<AUTHOR>Walt Whitman</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>462</PAGES>
<PRICE>$7.75</PRICE>
</BOOK>
<BOOK>
<TITLE>The Legend of Sleepy Hollow</TITLE>
<AUTHOR>Washington Irving</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>98</PAGES>
<PRICE>$2.95</PRICE>
</BOOK>
<BOOK>
<TITLE>The Marble Faun</TITLE>
<AUTHOR>Nathaniel Hawthorne</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>473</PAGES>
<PRICE>$10.95</PRICE>
</BOOK>
<BOOK>
<TITLE>Moby-Dick</TITLE>
<AUTHOR>Herman Melville</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>724</PAGES>
<PRICE>$9.95</PRICE>
</BOOK>
<BOOK>
<TITLE>Passing</TITLE>
<AUTHOR>Nella Larsen</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>165</PAGES>
<PRICE>$5.95</PRICE>
</BOOK>
<BOOK>
<TITLE>The Portrait of a Lady</TITLE>
<AUTHOR>Henry James</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>256</PAGES>
<PRICE>$4.95</PRICE>
</BOOK>
<BOOK>
<TITLE>Roughing It</TITLE>
<AUTHOR>Mark Twain</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>324</PAGES>
<PRICE>$5.25</PRICE>
</BOOK>
<BOOK>
<TITLE>The Scarlet Letter</TITLE>
<AUTHOR>Nathaniel Hawthorne</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>253</PAGES>
<PRICE>$4.25</PRICE>
</BOOK>
<BOOK>
<TITLE>The Turn of the Screw</TITLE>
<AUTHOR>Henry James</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>384</PAGES>
<PRICE>$3.35</PRICE>
</BOOK>
</INVENTORY>

Inventory Big Table.htm
<!--File Name:Inventory Big Table.htm -->
<HTML>
<HEAD>
<TITLE>Book Inventory</TITLE>
</HEAD>
<BODY>
<XML ID="dsoInventory" SRC="Inventory Big.xml"></XML>
<H2>Book Inventory</H2>
<BUTTON ONCLICK="InventoryTable.firstPage()">
|<First Page
</BUTTON>
<BUTTON ONCLICK="InventoryTable.previousPage()">
<Previous Page
</BUTTON>
<BUTTON ONCLICK="InventoryTable.nextPage()">
Next Page >
</BUTTON>
<BUTTON ONCLICK="InventoryTable.lastPage()">
Last Page >|
</BUTTON>
<p>
<TABLE ID="InventoryTable" DATASRC="#dsoInventory"
DATAPAGESIZE="5" BORDER="1" CELLPADDING="5">
<THEAD>
<TH>Title</TH>
<TH>Author</TH>
<TH>Binding</TH>
<TH>Pages</TH>
<TH>Price</TH>
</THEAD>
<TR ALIGN="center">
<TD><SPAN DATAFLD="TITLE "
STYLE="font-style:italic"></SPAN></TD>
<TD><SPAN DATAFLD="AUTHOR"></SPAN></TD>
<TD><SPAN DATAFLD="BINDING"></SPAN></TD>
<TD><SPAN DATAFLD="PAGES"></SPAN></TD>
<TD><SPAN DATAFLD="PRICE"></SPAN></TD>
</TR>
</TABLE>
</BODY>
</HTML>

使用巢状表格来显示阶层式记录集

    在前面的章节中,你已学得如何使用单一表格来显示以简单记录集型式建构的XML 文件,文件中每一笔记录包含了固定的一组字段,全部都只储存字符数据。现在你将学习如何使用巢状表格来显示特定的XML 文件,这种XML 文件的元素是以阶层式的记录集型式所建构。
    在阶层式的记录集中,每一笔记录除了固定的一组字段之外,还可以包含一组为数众多的巢状记录(零个或多个)。列表8-5 显示了一个建构成阶层式记录集构造的XML 文件范例。(你可在随书光盘的Inventory Hierarchy.xml 档案中找到。)在这份文件中,根元素(INVENTORY)包含了一系列的CATEGORY 记录。每一笔CATEGORY 记录由一个CATNAME 字段起始,该字段只包含字符数据。后面接着零或多个巢状的BOOK 元素。每一个巢状的BOOK 元素拥有五个字段(TITLE、AUTHOR、BINDING、PAGES 与PRICE)。
Inventory Hierarchy.xml
<?xml version="1.0"?>
<!--File Name:Inventory Hierarchy.xml -->
<INVENTORY>
<CATEGORY>
<CATNAME>Middle Ages</CATNAME>
<BOOK>
<TITLE>The Canterbury Tales</TITLE>
<AUTHOR>Geoffrey Chaucer</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>692</PAGES>
<PRICE>$18.95</PRICE>
</BOOK>
<BOOK>
<TITLE>Piers Plowman</TITLE>
<AUTHOR>William Langland</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>385</PAGES>
<PRICE>$10.95</PRICE>
</BOOK>
</CATEGORY>
<CATEGORY>
<CATNAME>Renaissance</CATNAME>
<BOOK>
<TITLE>The Blazing World</TITLE>
<AUTHOR>Margaret Cavendish</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>225</PAGES>
<PRICE>$8.79</PRICE>
</BOOK>
<BOOK>
<TITLE>Oroonoko</TITLE>
<AUTHOR>Aphra Behn</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>295</PAGES>
<PRICE>$4.95</PRICE>
</BOOK>
<BOOK>
<TITLE>Doctor Faustus</TITLE>
<AUTHOR>Christopher Marlowe</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>472</PAGES>
<PRICE>$15.95</PRICE>
</BOOK>
</CATEGORY>
<CATEGORY>
<CATNAME>18th Century</CATNAME>
<BOOK>
<TITLE>Gulliver's Travels</TITLE>
<AUTHOR>Jonathan Swift</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>324</PAGES>
<PRICE>$11.89</PRICE>
</BOOK>
<BOOK>
<TITLE>The History of Tom Jones:A
Foundling</TITLE>
<AUTHOR>Henry Fielding</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>438</PAGES>
<PRICE>$16.95</PRICE>
</BOOK>
<BOOK>
<TITLE>Love in Excess</TITLE>
<AUTHOR>Eliza Haywood</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>429</PAGES>
<PRICE>$12.95</PRICE>
</BOOK>
<BOOK>
<TITLE>Tristram Shandy</TITLE>
<AUTHOR>Laurence Sterne</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>322</PAGES>
<PRICE>$9.49</PRICE>
</BOOK>
</CATEGORY>
<CATEGORY>
<CATNAME>19th Century</CATNAME>
<BOOK>
<TITLE>Dracula</TITLE>
<AUTHOR>Bram Stoker</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>395</PAGES>
<PRICE>$17.95</PRICE>
</BOOK>
<BOOK>
<TITLE>Great Expectations</TITLE>
<AUTHOR>Charles Dickens</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>639</PAGES>
<PRICE>$6.95</PRICE>
</BOOK>
<BOOK>
<TITLE>Percival Keene</TITLE>
<AUTHOR>Frederick Marryat</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>425</PAGES>
<PRICE>$12.89</PRICE>
</BOOK>
<BOOK>
<TITLE>Treasure Island</TITLE>
<AUTHOR>Robert Louis Stevenson</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>283</PAGES>
<PRICE>$11.85</PRICE>
</BOOK>
<BOOK>
<TITLE>Wuthering Heights</TITLE>
<AUTHOR>Emily Bronte</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>424</PAGES>
<PRICE>$12.95</PRICE>
</BOOK>
</CATEGORY>
</INVENTORY>
    列表8-6 包含了一个HTML 网页,该网页使用巢状表格来显示列表8-5 中XML 文件的阶层式记录结构。(你可以在随书光盘的 Inventory Hierarchy.htm 档案中找到。)
Inventory Hierarchy.htm
<!--File Name:Inventory Hierarchy.htm -->
<HTML>
<HEAD>
<TITLE>Inventory of Classic English Literature</TITLE>
</HEAD>
<BODY>
<XML ID="dsoInventory" SRC="Inventory Hierarchy.xml"></XML>
<TABLE DATASRC="#dsoInventory" BORDER="1">
<THEAD>
<TH>Classic English Literature</TH>
</THEAD>
<TR>
<TD><SPAN DATAFLD="CATNAME"></SPAN></TD>
</TR>
<TR>
<TD>
<TABLE DATASRC="#dsoInventory" DATAFLD="BOOK"
BORDER="0" CELLSPACING="10">
<THEAD>
<TH>Title</TH>
<TH>Author</TH>
<TH>Binding</TH>
<TH>Pages</TH>
<TH>Price</TH>
</THEAD>
<TR ALIGN="CENTER">
<TD><SPAN DATAFLD="TITLE"
STYLE="font-style:italic"></SPAN></TD>
<TD><SPAN DATAFLD="AUTHOR"></SPAN></TD>
<TD><SPAN DATAFLD="BINDING"></SPAN></TD>
<TD><SPAN DATAFLD="PAGES"></SPAN></TD>
<TD><SPAN DATAFLD="PRICE"></SPAN></TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>

    在列表8-6 中,外部的表格被连结到XML 文件,在它的起始标签中你可以看到如下所示;
<TABLE DATASRC="#dsoInventory" BORDER="1">
    外部的表格也包含了一个标题(这是一个THEAD 元素,显示了「Classic English Literature」),加上两个表格的列(两个TR 元素)。浏览器会为每一个顶层记录(即,每一个CATEGORY 记录)重复这两个列。前两个列显示了CATNAME 字段。到目前为止,一切就像列表8-2 中显示简单记录集的范例表格那样运作。然而,第二列,包含一个巢状的表格,显示目前目录下每一个BOOK 记录的内容,而不是显示字段。下面是仅针对巢状表格的卷标:
<TABLE DATASRC="#dsoInventory" DATAFLD="BOOK" BORDER=0 CELLSPACING=10>
<THEAD>
<TH>Title</TH>
<TH>Author</TH>
<TH>Binding</TH>
<TH>Pages</TH>
<TH>Price</TH>
</THEAD>
<TR ALIGN="CENTER">
<TD><SPAN DATAFLD="TITLE"
STYLE="font-style:italic"></SPAN></TD>
<TD><SPAN DATAFLD="AUTHOR"></SPAN></TD>
<TD><SPAN DATAFLD="BINDING"></SPAN></TD>
<TD><SPAN DATAFLD="PAGES"></SPAN></TD>
<TD><SPAN DATAFLD="PRICE"></SPAN></TD>
</TR>
</TABLE>
    注意,你必须将巢状表格连结到不只是XML 文件(DATASRC = #"#dsoInventory"),同时还有巢状的BOOK 记录(DATAFLD ="BOOK"),如此表格将以巢状方式显示目前CATEGORY 记录内每一个BOOK 元素的内容。换言之,表格中的列元素(TR)将会重复这些BOOK 元素的每
一个。(注意,根据默认值,外部的表格被连结至顶层的元素-范例中的CATEGORY 记录-如此它将循序显示每一个记录。)
    下面是当你将列表8-6 开启于Internet Explorer 5 中,该列表看起来的样子:

    你可以使用附加的巢状表格来显示包含数层巢状记录的文件。例如,参考 列表8-5 的范例文件。假设你已经将每一个AUTHOR 字段换掉了:
<AUTHOR>Geoffrey Chaucer</AUTHOR>
    换成零或多个巢状的AUTHOR 记录:
<AUTHOR>
<FIRSTNAME>Geoffrey</FIRSTNAME>
<LASTNAME>Chaucer</LASTNAME>
</AUTHOR>
    在这种情况中,你可以使用附加的巢状表格为每一个BOOK 元素,显示所有的作者,这是利用与单一巢状表格中所使用的相同技术。

使用单一记录的数据链路

    单一记录的数据链路(Single-record data binding)指的是连结一个HTML 元素,该HTML 元素不是表格,而且也不包含在被连结的表格中。HTML 元素-例如SPAN、BUTTON 或LABEL元素-被连结到个别的XML 字段。该HTML 元素接着会自动显示自己被连结到的XML 字段的内容。例如,下面HTML 的SPAN 元素被连结到XML 文件的TITLE 字段,该XML 文件会透过名为dsoBook 的data island 被存取:
<SPAN DATASRC="#dsoBook" DATAFLD="TITLE"></SPAN>
    然而,因为HTML 元素并不像表格一样拥有许多部分,它只能一次一笔记录来显示字段的值。要使用单一记录的数据链路,XML 文件必须以简单的记录集的型式组成。已经在本章稍早的<使用个别的HTML 表格来显示简单记录集>章节中介绍过的简单记录集。
    单一记录的数据链路最简单的例子就是利用只包含一笔记录的XML 文件,如列表8-7 中的范例文件。(你可在随书光盘的Book.xml 档案中找到。)
Book.xml
<?xml version="1.0"?>
<!--File Name:Book.xml -->
<BOOK>
<TITLE>The Adventures of Huckleberry Finn</TITLE>
<AUTHOR>Mark Twain</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>298</PAGES>
<PRICE>$5.49</PRICE>
</BOOK>
    列表8-8 显示了一份将个别SPAN 元素连结至范例文件中的每一个字段(TITLE、AUTHOR、BINDING、PAGES 与PRICE)的HTML 网页。(你可在随书光盘的Book.htm 档案中找到。)
Book.htm
<!--File Name:Book.htm -->
<HTML>
<HEAD>
<TITLE>Book Description</TITLE>
</HEAD>
<BODY>
<XML ID="dsoBook" SRC="Book.xml"></XML>
<H2>Book Description</H2>
<SPAN STYLE="font-style:italic">Title:</SPAN>
<SPAN STYLE="font-weight:bold" DATASRC="#dsoBook"
DATAFLD="TITLE"></SPAN>
<BR>
<SPAN STYLE="font-style:italic">Author:</SPAN>
<SPAN DATASRC="#dsoBook " DATAFLD="AUTHOR"></SPAN>
<BR>
<SPAN STYLE="font-style:italic">Binding type:</SPAN>
<SPAN DATASRC="#dsoBook" DATAFLD="BINDING"></SPAN>
<BR>
<SPAN STYLE="font-style:italic">Number of pages:</SPAN>
<SPAN DATASRC="#dsoBook" DATAFLD="PAGES"></SPAN>
<BR>
<SPAN STYLE="font-style:italic">Price:</SPAN>
<SPAN DATASRC="#dsoBook" DATAFLD="PRICE"></SPAN>
</BODY>
</HTML>
    下面是Internet Explorer 5 显示列表8-8 的样子:


浏览数据记录

    如果XML 文件包含超过一笔的记录(最多到它们可包含的数量),单一记录数据链路变得有点复杂,因为HTML 元素一次只能显示一笔记录。被HTML 元素显示的记录称为current record(目前记录)。(因此,单一记录连结的另一种替换方法就是current-record binding,称为目前记录连结)在一开始,目前元素就是文件中的第一笔(或唯一的)记录。
    与XML 文件结合的DSO 提供了一组方法让你可以呼叫在记录间浏览。这些方法属于DSO 的记录集成员对象,并且被列在下面表格中。注意,在最后一行的范例呼叫是假设HTML 网页包含一个XML 的data island,其ID 为dsoInventory。

编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:使用串接样式表(CSS)来显示XML文件
下一篇:运用数据链路来显示XML文件(二)
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
XML和现代CGI应用程序 XML与其相关技术 XML文件的显示——CSS和XSL
给XML文件定义DTD 动态产生XML文档的几种方式 XML初级应用ABC
编写结构完整的XML文档 XML(可扩展标识语言)的产生 构造未来Web页面的工具语言-- XML
XML 入门介绍 XML入门精解之结构与语法 XML基础教程:掌握SAX
XML基础入门 建立MSXML 测试环境 XML 论坛
让Asp与XML交互 How to generate XML with SQL 2000 XML的一般信息
存取XML的属性 筛选和排序XML数据 使用XSL样式表来显示XML文件
检查XML文件的有效性 浏览整个XML文件 存取XML实体与卷标
最新更新 热点排行 推荐新闻
WML Script标准函数库
WML Script脚本程序设计(二)
WML Script脚本程序设计(一)
WML Script语法基础
WML编程
CGI测试
CGI教程-ErrorDocument 指令
CGI教程-解码数据发送给CGI脚本
跟我学Perl
Perl教学 Perl5的包和模块
Perl教学 Perl的面向对象编程
Perl教学 Perl5中的引用(指针)
Perl教学 格式化输出
Perl教学 关联数组(哈希表)
Perl教学 子程序
WML Script标准函数库
WML Script脚本程序设计(二)
WML Script脚本程序设计(一)
WML Script语法基础
WML编程
优秀公益广告作品欣赏(8)
java数据类型转换
Windows XP专业版IIS连接数的更改
新开放QQ免费挂级网站
优秀公益广告作品欣赏(7)
免费在QQ上看在线电影电视听音乐
QQ珊瑚虫外挂4.0版本发布!
WEB服务器配置全攻略(三)
免费把QQ炫铃设为本机QQ的系统提示音
Office2007简体中文版浮出水面 美图抢
微软将在华推分期付款,充值卡PC 可低价
 AMD处理器AM2测试 风扇竟运行7分钟
exeplorer.exe错误的问题的总结、解决
ASP.NET 2.0 中的异步页功能应用
硬盘坏道修复及数据恢复宝典
免费登录搜索引擎入口大全
搜索引擎注册九大秘法
小心摄像头成为黑客偷窥你的眼睛
内存混插常见问题和解决方法
Office2007简体中文版浮出水面 美图抢
 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyrights © 2004-2006 iYiT.Net All Rights Reserved.
网站合作、广告联系QQ:147007642、466949678
易特网络技术 点击这里给我发消息