一种通用XML数据岛动态生成和数据绑定方法

时间:2022-10-30 02:14:34

一种通用XML数据岛动态生成和数据绑定方法

摘 要:为了减少网页访问时网络的负载,采用XML数据岛技术实现网页中数据的处理。介绍XML数据岛的概念,并讨论Web页中XML数据岛生成和绑定的机制,给出一种使用ASP和ADO技术由数据库动态生成XML数据岛,并动态绑定数据的通用方法,可应用于各种基于Web的应用系统,提高开发效率。

关键词:XML数据岛;动态生成;数据绑定;Web程序设计;数据库

中图分类号: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定义的一种元标记语言,具有较强的数据表示能力,但显示能力不如HTML。在Web页中利用XML数据岛和XML-DSO技术,可以轻松实现XML数据的绑定,从而控制其显示格式,并且XML数据岛允许用户在客户端访问与操纵数据集,不必频繁地与服务器交互,从而减轻数据库服务器的负荷。XML已广泛应用于B/S结构的应用系统,因此,如何由传统的数据库生成XML数据岛及实现数据绑定则成为其中的关键技术。

1 XML数据岛技术

在IE5及以后的版本里,增加了对<xml>元素的支持,利用<xml>元素可以在HTML文件内直接嵌入XML数据,也可以包含对某个外部XML文件的引用,被HTML页面引用或包含的XML数据称为XML数据岛(Data Island)。

网页中直接嵌入XML数据的格式如下:

<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数据岛格式为:

<XML ID="xmldso" SRC="students.xml"></XML>

在IE5网页中,XML数据岛可以被作为一个数据源对象(Data Source Object,DSO)使用。XML数据源对象(XML-DSO)是一个ActiveX控件。在Web页面中,通过数据绑定或客户端脚本可以对XML数据源对象的数据进行操作。

2 XML数据生成与绑定机制

XML数据岛的数据可以来源于内嵌代码、外部XML文件或数据库。由于数据库具有较好的数据管理和控制能力,适于数据的集中存储和管理,而XML文件更适于数据的传输,因此可以通过数据对象(Activex Data Object,ADO)由数据库动态生成XML文件,然后引用到XML数据岛中。

XML数据岛技术作为一个数据源对象在客户端创建了XML数据的缓存,利用数据绑定可以将HTML控件元素与DSO实现绑定,从而在Web页中显示和操纵XML数据。

XML数据生成与绑定机制如图1所示。

在IE4和IE5中,许多HTML控件元素新增加了实现数据绑定的属性如:DATASRC表示控件要绑定的数据源对象的ID;DATAFLD表示控件要绑定的数据记录的字段;DATAFORMATAS表示控件要绑定的数据是文本还是HTML格式。

数据绑定对象提供了两种类型的数据绑定:表格数据绑定和单记录数据绑定。

(1) 表格数据绑定:将<table>的datasrc属性设置为XML数据岛的标识#xmldso(前面必须加#),表格列<td>由于不能绑定数据,所以需要加入<div>或<span>作为数据的容器,并将其datafld属性设置为xml数据的相应字段元素名。

<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) 单记录数据绑定:许多HTML元素可以实现单值数据绑定,如:A,APPLET,BUTTON,DIV,FRAME,IFRAME,IMG,INPUT,LABEL,SELECT,SPAN等。将HTML元素(如<input>)的datasrc属性设置为XML数据岛的标识#xmldso,datafld属性设置为xml数据的相应字段名。

<input type=text datasrc="#xmldso" datafld="number" width=20><br>

3 通用的XML数据岛动态生成和数据绑定方法

3.1 XML数据岛动态生成

ADO是Microsoft的一种数据访问接口,其对象集合中的Recordset对象存储检索到的记录集。在ADO 2.1版中,增加了对XML格式的支持,可以使用Recordset对象的 Save方法将记录集保存,格式如下:

Recordset.Save szdest,adPersistXML

其中:szdest可以是带绝对路径的文件名或Response对象;adPersistXML为常量。但是,该方法生成的XML文件带有XML模式、每条记录为1个元素,其格式结构复杂,不便于数据绑定和操纵。在此给出一个XML数据结构化良好且通用的XML数据岛动态生成方法,由服务器端的ASP程序实现(程序名xmldata.asp)。

首先,设置Response对象的属性:输出流到客户端、MIME类型为text/xml。

<%@ Language=VBScript %>

<%Response.Buffer=false

Response.ContentType="text/xml" %>

通过ADO从数据库读取数据到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数据,以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程序的结果即是一个XML格式的文件,可被XML数据岛引用。

3.2 动态数据绑定

在Web页中,数据岛中可以如同XML文件一样引用上面的“xmldata.asp”程序,然后使用客户端脚本动态地进行表格数据绑定或单值数据绑定。以下是动态表格绑定的代码,单值数据绑定类似。

定义窗口载入函数脚本。首先,得到表格的表格头行和表格体行的对象,以及数据岛记录集的引用:

<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的新增方法),根据数据岛记录集的字段数和字段名生成表头行的表列:

for each objfield in objxmlrs.fields

if objfield.name<>"MYMText" then

set objheadcell=objtablehead.insertcell()

objheadcell.innerHtml=objfield.name

同上方法在表格体中生成数据列,并绑定数据岛的相应列,最后将整个表格绑定到数据岛:

set objbodycell=objtablebody.insertcell()

objbodycell.innerHtml="<span datafld=′"&objfield.name&"′></span>"

end if

next

document.all("tbldata").datasrc="#xmldso"

end sub

</script>

定义数据岛(引用动态生成XML数据的ASP程序)和表格,表格的数据绑定暂时为空,由以上脚本动态绑定:

<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 结 语

服务器端专注于数据的管理和控制,XML数据用于传输,采用XML数据岛、XML数据绑定和客户端脚本来完成数据的显示,这种工作方式很大程度上减少了服务器的访问次数和网络传输的数据量,而且数据采用XML格式表示通用性更好,在B/S系统中得到广泛采用。该文的XML数据岛动态生成和数据动态绑定方法具有通用性,解决了数据库到XML数据的生成和显示问题,具有广泛的实用性。

参考文献

[1]Michael Morrison.XML揭秘入门、应用、精通[M].北京:清华大学出版社,2001.

[2]陈建红,徐涛.Web数据库与XML应用[M].北京:高等教育出版社,2004.

[3]Mark Baartse,Richard Blair.ASP与XML高级编程[M].北京:清华大学出版社,2002.

[4]孙一中.XML理论和应用基础[M].北京:北京邮电大学出版社,2000.

[5]张文学.基于XML数据岛的客户端数据操作的实现[J].洛阳大学学报,2005,20(2):57-60.

[6]郝森,朱战立.对XML文档结构树形表示的研究与实现[J].现代电子技术,2007,30(18):83-84,90.

[7]冯少荣.基于XML的Web数据集成技术的研究[J].计算机应用与软件,2005,22(7):39-41.

[8]徐雪霖.Web数据库访问技术探析[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数据库技术[J].计算机与现代化,2002(4):49-53,57.

作者简介

张文学 男,1968年出生,硕士,副教授。从事数据库和网络技术教学和研究。

上一篇:随机共振方法在弱信号检测中的应用 下一篇:红外热像测温技术及其应用研究