摘 要:為了減少網(wǎng)頁訪問時網(wǎng)絡的負載,采用XML數(shù)據(jù)島技術(shù)實現(xiàn)網(wǎng)頁中數(shù)據(jù)的處理。介紹XML數(shù)據(jù)島的概念,并討論Web頁中XML數(shù)據(jù)島生成和綁定的機制,給出一種使用ASP和ADO技術(shù)由數(shù)據(jù)庫動態(tài)生成XML數(shù)據(jù)島,并動態(tài)綁定數(shù)據(jù)的通用方法,可應用于各種基于Web的應用系統(tǒng),提高開發(fā)效率。
關鍵詞:XML數(shù)據(jù)島;動態(tài)生成;數(shù)據(jù)綁定;Web程序設計;數(shù)據(jù)庫
中圖分類號:TP393文獻標識碼:B
文章編號:1004 373X(2009)02 120 03
Universal Method of XML Data Island Dynamic Generation and Data Binding
ZHANG Wenxue
(Luoyang Institute of Science and Technology,Luoyang,471023,China)
Abstract:To reduce the network load when visiting the Web page,using XML data island technology to process XML data in Web.This article introduces the concept of XML data island,discusses the mechanism of XML data island generation and binding in Web Page,gives the universal method of XML data island generated from database with ASP and ADO,and binds XML data dynamically,applicable for various applications based on Web.It improves the efficiency of Web development.
Keywords:XML data island;dynamic generation;XML data binding;Web program design;database
0 引 言
XML(eXtensible Markup Language)語言是由W3C定義的一種元標記語言,具有較強的數(shù)據(jù)表示能力,但顯示能力不如HTML。在Web頁中利用XML數(shù)據(jù)島和XML-DSO技術(shù),可以輕松實現(xiàn)XML數(shù)據(jù)的綁定,從而控制其顯示格式,并且XML數(shù)據(jù)島允許用戶在客戶端訪問與操縱數(shù)據(jù)集,不必頻繁地與服務器交互,從而減輕數(shù)據(jù)庫服務器的負荷。XML已廣泛應用于B/S結(jié)構(gòu)的應用系統(tǒng),因此,如何由傳統(tǒng)的數(shù)據(jù)庫生成XML數(shù)據(jù)島及實現(xiàn)數(shù)據(jù)綁定則成為其中的關鍵技術(shù)。
1 XML數(shù)據(jù)島技術(shù)
在IE5及以后的版本里,增加了對<xml>元素的支持,利用<xml>元素可以在HTML文件內(nèi)直接嵌入XML數(shù)據(jù),也可以包含對某個外部XML文件的引用,被HTML頁面引用或包含的XML數(shù)據(jù)稱為XML數(shù)據(jù)島(Data Island)。
網(wǎng)頁中直接嵌入XML數(shù)據(jù)的格式如下:
<XML ID="xmldso">
<?xml version="1.0"?>
<students>
<student>
<number>041011200</number>
<name>zhang</name>
<sex>male</sex>
</student>
<student>
…
</student>
…
</students>
</XML>
引用外部XML文件的XML數(shù)據(jù)島格式為:
<XML ID="xmldso" SRC="students.xml"></XML>
在IE5網(wǎng)頁中,XML數(shù)據(jù)島可以被作為一個數(shù)據(jù)源對象(Data Source Object,DSO)使用。XML數(shù)據(jù)源對象(XML-DSO)是一個ActiveX控件。在Web頁面中,通過數(shù)據(jù)綁定或客戶端腳本可以對XML數(shù)據(jù)源對象的數(shù)據(jù)進行操作。
2 XML數(shù)據(jù)生成與綁定機制
XML數(shù)據(jù)島的數(shù)據(jù)可以來源于內(nèi)嵌代碼、外部XML文件或數(shù)據(jù)庫。由于數(shù)據(jù)庫具有較好的數(shù)據(jù)管理和控制能力,適于數(shù)據(jù)的集中存儲和管理,而XML文件更適于數(shù)據(jù)的傳輸,因此可以通過數(shù)據(jù)對象(Activex Data Object,ADO)由數(shù)據(jù)庫動態(tài)生成XML文件,然后引用到XML數(shù)據(jù)島中。
XML數(shù)據(jù)島技術(shù)作為一個數(shù)據(jù)源對象在客戶端創(chuàng)建了XML數(shù)據(jù)的緩存,利用數(shù)據(jù)綁定代理可以將HTML控件元素與DSO實現(xiàn)綁定,從而在Web頁中顯示和操縱XML數(shù)據(jù)。
XML數(shù)據(jù)生成與綁定機制如圖1所示。
在IE4和IE5中,許多HTML控件元素新增加了實現(xiàn)數(shù)據(jù)綁定的屬性如:DATASRC表示控件要綁定的數(shù)據(jù)源對象的ID;DATAFLD表示控件要綁定的數(shù)據(jù)記錄的字段;DATAFORMATAS表示控件要綁定的數(shù)據(jù)是文本還是HTML格式。
數(shù)據(jù)綁定代理對象提供了兩種類型的數(shù)據(jù)綁定:表格數(shù)據(jù)綁定和單記錄數(shù)據(jù)綁定。
(1) 表格數(shù)據(jù)綁定:將<table>的datasrc屬性設置為XML數(shù)據(jù)島的標識#xmldso(前面必須加#),表格列<td>由于不能綁定數(shù)據(jù),所以需要加入<div>或<span>作為數(shù)據(jù)的容器,并將其datafld屬性設置為xml數(shù)據(jù)的相應字段元素名。
<table id="xmltable" border=1 datasrc="#xmldso" datapagesize=4>
<thead><tr><th>學號</th><th>姓名</th><th>性別</th></tr></thead>
<tbody><tr>
<td><div datafld="number"></div></td>
<td><div datafld="name"></div></td>
<td><div datafld="sex"></div></td>
</tr></tbody>
</table>
(2) 單記錄數(shù)據(jù)綁定:許多HTML元素可以實現(xiàn)單值數(shù)據(jù)綁定,如:A,APPLET,BUTTON,DIV,F(xiàn)RAME,IFRAME,IMG,INPUT,LABEL,SELECT,SPAN等。將HTML元素(如<input>)的datasrc屬性設置為XML數(shù)據(jù)島的標識#xmldso,datafld屬性設置為xml數(shù)據(jù)的相應字段名。
<input type=text datasrc="#xmldso" datafld="number" width=20><br>
3 通用的XML數(shù)據(jù)島動態(tài)生成和數(shù)據(jù)綁定方法
3.1 XML數(shù)據(jù)島動態(tài)生成
ADO是Microsoft的一種數(shù)據(jù)訪問接口,其對象集合中的Recordset對象存儲檢索到的記錄集。在ADO 2.1版中,增加了對XML格式的支持,可以使用Recordset對象的 Save方法將記錄集保存,格式如下:
Recordset.Save szdest,adPersistXML
其中:szdest可以是帶絕對路徑的文件名或Response對象;adPersistXML為常量。但是,該方法生成的XML文件帶有XML模式、每條記錄為1個元素,其格式結(jié)構(gòu)復雜,不便于數(shù)據(jù)綁定和操縱。在此給出一個XML數(shù)據(jù)結(jié)構(gòu)化良好且通用的XML數(shù)據(jù)島動態(tài)生成方法,由服務器端的ASP程序?qū)崿F(xiàn)(程序名xmldata.asp)。
首先,設置Response對象的屬性:輸出流到客戶端、MIME類型為text/xml。
<%@ Language=VBScript %>
<%Response.Buffer=false
Response.ContentType="text/xml" %>
通過ADO從數(shù)據(jù)庫讀取數(shù)據(jù)到Recordset對象。
<%Set conn=Server.CreateObject("ADODB.connection")
Set rs=Server.CreateObject("ADODB.recordset")
conn.ConnectionString=<連接字符串>
conn.open
sqlText=<SQL語句>
set rs=conn.Execute(sqlText)
rs.MoveFirst
%>
分析Recordset對象,生成XML數(shù)據(jù),以Response的流形式輸出到客戶端。
<?xml version="1.0" encoding="gb2312"?>
<Months>
<%do while not rs.EOF %>
<Month>
<% for i=0 to rs.Fields.Count-1 %>
<<%=rs.Fields(i).Name %>><%=rs.Fields(i).Value %></<%=rs.Fields(i).Name %>>
<% next
rs.MoveNext %>
</Month>
<% loop %>
</Months>
關閉和撤消rs和conn對象:
<% rs.Close
set rs=nothing
conn.Close
set conn=nothing %>
以上xmldata.asp程序的結(jié)果即是一個XML格式的文件,可被XML數(shù)據(jù)島引用。
3.2 動態(tài)數(shù)據(jù)綁定
在Web頁中,數(shù)據(jù)島中可以如同XML文件一樣引用上面的“xmldata.asp”程序,然后使用客戶端腳本動態(tài)地進行表格數(shù)據(jù)綁定或單值數(shù)據(jù)綁定。以下是動態(tài)表格綁定的代碼,單值數(shù)據(jù)綁定類似。
定義窗口載入函數(shù)腳本。首先,得到表格的表格頭行和表格體行的對象,以及數(shù)據(jù)島記錄集的引用:
<html>
<script language="vbscript">
sub window_onload()
set objtablehead=document.all("tbldata").rows(0)
set objtablebody=document.all("tbldata").rows(1)
set objxmlrs=document.all("xmldso").recordset
在表頭行中,使用表格行對象的insertcell方法(IE5的新增方法),根據(jù)數(shù)據(jù)島記錄集的字段數(shù)和字段名生成表頭行的表列:
for each objfield in objxmlrs.fields
if objfield.name<>"MYMText" then
set objheadcell=objtablehead.insertcell()
objheadcell.innerHtml=objfield.name
同上方法在表格體中生成數(shù)據(jù)列,并綁定數(shù)據(jù)島的相應列,最后將整個表格綁定到數(shù)據(jù)島:
set objbodycell=objtablebody.insertcell()
objbodycell.innerHtml="<span datafld=′"&objfield.name;&"′></span>"
end if
next
document.all("tbldata").datasrc="#xmldso"
end sub
</script>
定義數(shù)據(jù)島(引用動態(tài)生成XML數(shù)據(jù)的ASP程序)和表格,表格的數(shù)據(jù)綁定暫時為空,由以上腳本動態(tài)綁定:
<body>
<xml id="xmldso" src="myxml1.asp"></xml>
<table id="tbldata" border=1>
<thead><tr></tr></thead>
<tbody><tr></tr></tbdoy>
</table>
</body></html>
4 結(jié) 語
服務器端專注于數(shù)據(jù)的管理和控制,XML數(shù)據(jù)用于傳輸,采用XML數(shù)據(jù)島、XML數(shù)據(jù)綁定和客戶端腳本來完成數(shù)據(jù)的顯示,這種工作方式很大程度上減少了服務器的訪問次數(shù)和網(wǎng)絡傳輸?shù)臄?shù)據(jù)量,而且數(shù)據(jù)采用XML格式表示通用性更好,在B/S系統(tǒng)中得到廣泛采用。該文的XML數(shù)據(jù)島動態(tài)生成和數(shù)據(jù)動態(tài)綁定方法具有通用性,解決了數(shù)據(jù)庫到XML數(shù)據(jù)的生成和顯示問題,具有廣泛的實用性。
參考文獻
[1]Michael Morrison.XML揭秘入門、應用、精通[M].北京:清華大學出版社,2001.
[2]陳建紅,徐濤.Web數(shù)據(jù)庫與XML應用[M].北京:高等教育出版社,2004.
[3]Mark Baartse,Richard Blair.ASP與XML高級編程[M].北京:清華大學出版社,2002.
[4]孫一中.XML理論和應用基礎[M].北京:北京郵電大學出版社,2000.
[5]張文學.基于XML數(shù)據(jù)島的客戶端數(shù)據(jù)操作的實現(xiàn)[J].洛陽大學學報,2005,20(2):57-60.
[6]郝森,朱戰(zhàn)立.對XML文檔結(jié)構(gòu)樹形表示的研究與實現(xiàn)[J].現(xiàn)代電子技術(shù),2007,30(18):83-84,90.
[7]馮少榮.基于XML的Web數(shù)據(jù)集成技術(shù)的研究[J].計算機應用與軟件,2005,22(7):39-41.
[8]徐雪霖.Web數(shù)據(jù)庫訪問技術(shù)探析[J].微計算機信息,2004(2):110-112.
[9]Xu Yu,Luo Daofeng,Meng Xiaofeng,et al.Dynamically Updating XML Data:Numbering Scheme Revisited[J].World Wide Web,2005,8(1):5-26.
[10]萬常選.基于XML的Web數(shù)據(jù)庫技術(shù)[J].計算機與現(xiàn)代化,2002(4):49-53,57.
作者簡介
張文學 男,1968年出生,碩士,副教授。從事數(shù)據(jù)庫和網(wǎng)絡技術(shù)教學和研究。