| 域名空间 下载中心 社区论坛 信息公告 MY小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
运用数据链路来显示XML文件(一)http://www.iyit.net 日期:2006-5-24 12:00:50 来源:整理转载 点击: |
在数据链路中,你将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 值。
<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 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 最新更新 | 热点排行 | 推荐新闻 | |||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
| 友情链接 | ||||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||