IT学习者 | 文章大全 | 技术文档 | 桌面壁纸 | 实用查询 | 网络电台 | 成语 | 歇后语 | 网址 | 下载 | 周公解梦 | 生日密码 | 电视剧365 | Flash
 您现在的位置: IT学习者 >> 文章大全 >> 网络编程 >> XML学习

XML与HTML的结合(下)

【 作者:张剑    来源:网络  更新时间:2004-12-18 | 字体:

XML的嵌套处理

一般情况下,我们从数据库中查询得到的结果集可能很大,所以从服务器返回到客户端时,数据会被分成若干个页面分别进行传递。此时,利用TABLE元素中的DATAPAGESIZE属性可以指定每个页面包含记录集条目的个数。

例如:

<TABLE DATASRC=“#xmldso” DATAPAGESIZE=10>

很显然,如果XML数据格式是对称的,则无论是映射到ADO记录集还是绑定到表格元素上,效果都会很好。而在实际应用中,XML数据为非对称的例子也很多,比如一本书的作者可能就不止一位,这在映射和绑定时都会产生一定的麻烦。解决问题的办法就是利用嵌套。每一行表格仍对应一条主元素,每一栏也对应着一个子元素。对于重复元素,则使用嵌套的表格。我们假设在books.xml中,第一本书的作者为Dean Straight,第二本书的作者为Charlotte Cooper、Shelley Burke和Regina Murphy。此时,绑定过程如下:

● 创建TABLE元素,并将数据岛ID赋值给DATAFLD属性;

● 对于单独的XML元素,如<isbn>,创建TD元素,并设定相应的DATAFLD属性;

● 对于重复元素,在TD元素内部嵌套一个表格;

● 用单行单列的形式显示作者信息。

注意这里的DATAFLD属性必须设定为“$TEXT”,

以保证嵌套元素的内容被全部显示在指定的元素中。

完整的HTML代码如下所示:

<TABLE BORDER=1 DATASRC=“#xmldso”>

<THEAD><TR><TH>Title</TH>

<TH>ISBN</TH>

<TH>Author</TH></TR></THEAD>

<TBODY>

<TR><TD>

<DIV DATAFLD=“title”></DIV></TD>

<TD><DIV DATAFLD=“isbn”>

</DIV></TD>

<TD>

<TABLE BORDER=0 DATASRC=“#xmldso” DATAFLD=“author”>

<TR><TD><SPAN DATAFLD=“$Text”></SPAN></TD></TR>

</TABLE>

</TD>

</TR></TBODY>

</TABLE>

事实上,使用DSO效果最好的情况是针对结构对称的数据,而处理非对称数据更有效的办法是使用我们以后将要介绍的DOM技术。

DSO技术的应用

1. 访问元素的属性

用DSO访问元素的属性很简单,可以直接把属性按子元素来处理。

例如:

<book isbn=“9-001-122-12”>

……

</book>

这样,在绑定到HTML表格中时,就可以直接按子元素来处理:

<TD><SPAN DATAFLD=“isbn”> </SPAN></TD>

如果遇到属性名和子元素名一样的情况,在元素名前加上“!”进行区分。 2.遍历记录集

DSO把XML数据岛当做ADO记录集进行处理的一大好处是可以利用ADO提供的各种方法对数据源进行访问,尤其是当把数据岛与类似SPAN、DIV和INPUT等HTML元素绑定时。通常这些元素显示的是记录集的首条记录,要想对记录集进行遍历浏览,可以使用ADO的方法 : Move、MoveFirst、MoveLast、MoveNext和MovePrevious。比如创建一个按钮响应函数,只要用户点击“Next”按钮,就可以逐条浏览相应的记录。

例如:

<XML ID=“xmldso” SRC=“books.xml”>

</XML>

Sub btnNext_onclick()

xmldso.RecordSet.MoveNext

End Sub

3.与Script语言相结合

有些用户比较习惯编写Script语言,利用DSO技术同样可以与各种Script很好地结合在一起。

例如(以VB Script为例),访问记录集时,代码如下:

Dim rsBooks

Set rsBooks = xmldso.RecordSet

访问字段(子元素)的值:

Dim sTitle

sTitle = rsBooks(“title”)

可以使用innerText和innerHTML属性把得到的值传递给HTML元素。例如,有一个DIV元素名为divTitle,赋值代码如下所示:

divTitle.innerTEXT = sTitle

利用脚本程序还可以处理许多DSO事件,下表列举了其中的一部分事件:

在脚本中处理各种事件的方法就是在<SCRIPT>标签中使用FOR属性指定XML数据岛ID,使用EVENT属性确定事件类型。

例如,获取记录集中条目的个数:

<SCRIPT Language=“VB Script” FOR=“xmldso” EVENT=“onDataAvailable”>

lblRecords.value = booklist.RecordSet.RecordCount

</SCRIPT>

除了显示记录数据之外,脚本程序还可以对记录集进行快速查询、排序、编辑等操作。但要指出的是,虽然ADO技术中提供了类似SortColumn和SortAscending等方法对XML数据进行排序,但是效果不如XSL中的排序操作,所以建议大家充分利用XSL技术来实现这部分功能。

其余的功能,如利用脚本对记录集进行诸如增加、删除、修改等操作,或是分页显示HTML表格等等,在这里就不一一举例说明了,用法与前面的操作大同小异。最后需要说明的是,所有对DSO对象的操作都是在用户端完成的,实际上是服务器数据对象的一份复制品,这样做的好处是避免了网络承受大量数据通信的负担。但这时用户端所做的任何操作对服务器上存储的数据毫无影响,如果要想对服务器记录也进行修改,那么就要用到客户端与服务器端的数据交换技术,我们将在以后对此进行介绍。

相 关 文 章
相 关 软 件
逃生 放生 黄玫瑰 想太多 那滋味 擦肩而过 放手去爱 北京欢迎你 依然在一起 吻得太逼真 感动天感动地 坐上火车去拉萨 怎么会狠心伤害我
心碎 冲动 小太阳 别碰我 蒲公英 千山万水 改变自己 一定要爱你 等爱的玫瑰 陷入爱里面 北极星的眼泪 最后一次的温柔 亲爱的那不是爱情
光荣 火花 坏女人 日不落 樱花草 为你写诗 独家记忆 夏天的味道 寂寞才说爱 忘不掉的伤 爱上你是个错 第三者的第三者 地球人都知道我爱你
假如 相思 是非题 有缘人 舍不得 我的答铃 死而无憾 外滩十八号 越爱越难过 123木头人 和寂寞说分手 爱上你是我的错 爱情里没有谁对谁错
加入收藏留言建议自助友情链接普通友情链接站长的Blog
版权所有   COPYRIGHT 2002-2008 ★IT学习者★ ALL RIGHTS RESERVED.