打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
XML:快速表列资料-资料系结|http://www.itonline.gd.cn
userphoto

2005.12.20

关注
XML:快速表列资料-资料系结

www.itonline.gd.cn  2003-12-17



  快速表列资料-资料系结
在上一期的文章中我们介绍了使用ADO从资料库取出资料转换成为XML,并利用XSL技术将之展现在网页上。渐渐地整合各种XML应用技术,在这一期将介绍透过资料系结技术,轻松快速地表列资料。  
谈到资料系结,它到底有什么好处呢?首先第一点它使用上直觉、简单,第二点它不需撰写大量的程式即可达到资料展现的目的,第三点它维护轻松、容易修改,主要是因为资料与展现的HTML标签分离。接下来就这三点来讨论资料系结如何应用吧! 

资料系结
 
首先如果要使用资料系结技术来展现资料,必须要在网页中建立XML的资料来源物件(Data Source Object),文中简称DSO,建立DSO的方式有两种,第一种是使用Java Applet连结到一份Books.xml档案资料,范例如下: 
< HTML >
< HEAD >  
< APPLET CODE="com.ms.xml.dso.XMLDSO.class" 
id="xmldso" width=0 height=0 > 
< PARAM NAME="URL" VALUE="Books.xml" >
< /APPLET >  
< /HEAD >
< BODY >

< /BODY >
< /HTML >  
JavaApplet.htm 
第二种方式是建立XML DataIsland(XML资料岛),范例如下: 
< HTML > 
< HEAD >  
< xml id="xmldso" src="Books.xml" >< /xml > 
< /HEAD > 
< BODY > 

< /BODY >
< /HTML >  
XMLDataIsland1.htm 
或者直接将XML资料崁入DataIsland中,范例如下: 
< HTML >
< HEAD >  
< xml id="xmldso" > 
< ?xml version="1.0"? >
< booklist > 
< book > 
< title >The Gourmet Microwave< /title > 
< isbn >72-80081-082< /isbn >
< publisher >New Moon Books< /publisher >
< price >9.95< /price >
< details >Details.asp?isbn=72-80081-082< /details >
< author >Charlotte M. Cooper< /author >
< author >Shelley B. Burke< /author >
< author >Regina P. Murphy< /author >
< /book >
< /booklist >
< /xml >  
< /HEAD >
< BODY >

< /BODY >
< /HTML >  
XMLDataIsland2.htm 
这两种方式都能建立DSO,不过第二种方式,也就是XML DataIsland的语法只有在IE5以后的版本才有支援,在这边预设读者都有IE5可以测试。建立好DSO,先看一下DSO里面的资料,也就是连结到的XML档案Books.xml,如下列档案内容: 
< ?xml version="1.0"? > 
< booklist > 
< book > 
< title >The Gourmet Microwave< /title > 
< isbn >72-80081-082< /isbn >
< publisher >New Moon Books< /publisher >
< price >9.95< /price >
< details >Details.asp?isbn=72-80081-082< /details >
< author >Charlotte M. Cooper< /author >
< author >Shelley B. Burke< /author >
< author >Regina P. Murphy< /author >
< /book >
< book > 
< title >Sushi, Anyone?< /title > 
< isbn >72-80081-024< /isbn > 
< publisher >New Moon Books< /publisher > 
< price >14.99< /price >
< details >Details.asp?isbn=72-80081-024< /details >
< author >Charlotte M. Cooper< /author >
< author >Yoshi Nagase< /author >
< /book > 
< book > 
< title >The Busy Executive‘‘s Database Guide< /title >
< isbn >9-001-122-12< /isbn >
< publisher >Binnet and Hardley< /publisher > 
< price >19.95< /price >
< details >Details.asp?isbn=9-001-122-12< /details >
< author >Mayumi Ohno< /author > 
< /book > 
< book > 
< title >Cooking With Computers: Surreptitous Balance Sheet< /title >
< isbn >9-001-122-90< /isbn >
< publisher >Binnet and Hardley< /publisher > 
< price >11.95< /price > 
< details >Details.asp?isbn=9-001-122-90< /details >
< author >Mayumi Ohno< /author >
< author >Ian H. Devling< /author >
< author >Peter Wilson II< /author >
< author >Lars Peterson< /author > 
< /book > 
< book > 
< title >Straight Talk About Computers< /title > 
< isbn >9-001-122-01< /isbn > 
< publisher >Binnet and Hardley< /publisher >
< price >19.99< /price > 
< details >Details.asp?isbn=9-001-122-01< /details >
< author >Lars Peterson< /author > 
< /book > 
< /booklist > 
 
 
XML档案中包含五本书,每本书都有一个以上的作者。接下来要如何让HTML标签来展现资料呢?其实很简单,例如下面的范例,仅仅在标签内加上两个属性设定(datasrc与datafld),第一笔资料就能够系结在标签内了: 
< HTML > 
< HEAD > 
< xml id="xmldso" src="Books.xml" > < /xml >
< /HEAD > 
< BODY > 书号:< span datasrc="#xmldso" datafld="isbn"  >< /span >< br > 
书名:< TEXTAREA rows=2 cols=20 id=textarea1 name=textarea1   datasrc="#xmldso" datafld="title" >< /TEXTAREA >< br > 
出版商:< INPUT type="button" value="Button" id=button1 name=button1   datasrc="#xmldso" datafld="publisher"  >< br > 
价格:< INPUT type="text" id=text1 name=text1  datasrc="#xmldso" datafld="price"  >  
< /BODY > 
< /HTML >  
DataIsland3.htm 
结果图如下: 
 

  原来datasrc属性就是指定DSO,而datafld就是指定栏位,并且个别用不同的标签来展现,读者就会发现资料系结的弹性以及方便了。例如价格栏位资料会系结到TextBox的Value属性,所以结果可以看到资料便展现在TextBox里面。 
但是有一点必须要注意,并不是所有的HTML标签都支援这两个属性,在以下的表格中列出支援的HTML标签以及资料系结后所对应的标签属性: 


HTML标签 资料系结标签属性 
A href 
APPLET property value via PARAM  
BUTTON innerText, innerHTML  
DIV innerText, innerHTML  
FRAME src 
IFRAME src 
IMG src 
INPUT TYPE=BUTTON innerText, innerHTML 
INPUT TYPE=CHECKBOX checked 
INPUT TYPE=HIDDEN value 
INPUT TYPE=PASSWORD value 
INPUT TYPE=RADIO checked  
INPUT TYPE=TEXT value  
LABEL innerText, innerHTML 
LEGEND innerText, innerHTML 
MARQUEE innerText, innerHTML 
SELECT obj.options(obj.selectedIndex).text 
SPAN innerText, innerHTML  
TEXTAREA value  
 
如上表span标签在设定完datasrc及dtafld之后,资料会存放在标签的innerText或innerHTML属性中,这代表资料能够以TEXT纯文字展现或以HTML展现。资料系结之后预设使以纯文字展现,也就是存放在innerText属性,例如改写Books.xml的第一笔资料的isbn栏位如下: 
< book >
< title >The Gourmet Microwave< /title > 
  < isbn > < B < 72-80081-082 < /B < ;< /isbn > 
< publisher >New Moon Books< /publisher > 
< price >9.95< /price >
< details >Details.asp?isbn=72-80081-082< /details >
< author >Charlotte M. Cooper< /author >
< author >Shelley B. Burke< /author > 
< author >Regina P. Murphy< /author > 
< /book >  
 
  其中‘<’代表‘< ’符号,‘&glt;’代表‘ >’符号,主要是因为XML资料中大于和小于符号是保留字,所以必须以其他方式表现,此时再度执行DataIsland3.htm会得到以下结果:  

  但是这不是想要的结果,主要的目的是希望书号栏位资料以粗体展现,此时必须配合另一个HTML属性,也就是修改DataIsland3.htm的span标签,再加上一个属性dataformatas设定为HTML。此时资料系结后,资料便会存放在span标签的innerHTML属性,也就是以HTML方式展现,如下程式码及结果: 
书号:< span datasrc="#xmldso" datafld="isbn"  dataformatas="HTML" >< /span >< br >  
 
 

  浏览资料
 
到目前为止,虽然资料系结很方便看到所需的资料,但是都只能看到第一笔,所以应该要有浏览的机制,也就是加上可以切换上下笔的功能。首先在页面上放进四颗按钮并给定按钮文字内容,然后加上被点选后所执行的程式如下:  
< HTML > 
< HEAD > 
< META name=VI60_defaultClientscript content=VBscript >
< META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0" >
< TITLE >< /TITLE > 
< xml id="xmldso" src="Books.xml" >< /xml >
< script ID=clientEventHandlersVBS LANGUAGE=vbscript >
< !-- 

Sub button2_onclick   xmldso.recordset.movefirst 
End Sub

Sub button3_onclick   xmldso.recordset.moveprevious 
if xmldso.recordset.bof then 
xmldso.recordset.movefirst
end if  
End Sub

Sub button4_onclick   xmldso.recordset.movenext 
if xmldso.recordset.eof then 
xmldso.recordset.movelast 
end if  
End Sub 

Sub button5_onclick   xmldso.recordset.movelast 
End Sub

-- > 
< /script >
< /HEAD >
< BODY > 

书号:< span datasrc="#xmldso" datafld="isbn" dataformatas=HTML >< /span >< br > 
书名:< TEXTAREA rows=2 cols=20 id=textarea1 name=textarea1 datasrc="#xmldso" datafld="title" >< /TEXTAREA >< br > 
出版商:< INPUT type="button" value="Button" id=button1 name=button1 datasrc="#xmldso" datafld="publisher" >< br > 
价格:< INPUT type="text" id=text1 name=text1 datasrc="#xmldso" datafld="price" >< br >

  < INPUT type="button" value="第一笔" id=button2 name=button2 >
< INPUT type="button" value="上一笔" id=button3 name=button3 > 
< INPUT type="button" value="下一笔" id=button4 name=button4 >
< INPUT type="button" value="最后一笔" id=button5 name=button5 >  

< /BODY >
< /HTML > 
DataIsland3.htm 
上面的程式中会将XML资料模拟成RecordSet,此时就可以透过RecordSet的Method来浏览资料。不过如果想要同时浏览多笔资料又该如何?这时可以使用Table标签来做资料系结,如以下方式: 
< HTML >
< HEAD >
< TITLE >< /TITLE > 
< xml id="xmldso" src="Books.xml" >< /xml >
< /HEAD > 
< BODY > 

< TABLE WIDTH=100% BORDER=1 datasrc=#xmldso > 
< THead >
< TD >书号< /TD >< TD >书名< /TD >< TD >价格< /TD >< TD >作者< /TD >
< /THead >
< TR >
< TD >< span datafld=isbn >< /span >< /TD > 
< TD >< span datafld=title >< /span >< /TD >
< TD >< span datafld=price >< /span >< /TD > 
< TD >< span datafld=author >< /span >< /TD >
< /TR >
< /TABLE >

< /BODY >
< /HTML >  
 
结果如下:  
 

  但是由于每一笔资料有多个作者栏位资料,所以资料系结的方式必须稍作修改,以槽状结构来系结资料: 
< TABLE WIDTH=100% BORDER=1 datasrc=#xmldso > 
< THead > 
< TD >书号< /TD >< TD >书名< /TD >< TD >价格< /TD >< TD >作者< /TD >
< /THead > 
< TR > 
< TD >< span datafld=isbn >< /span >< /TD >
< TD >< span datafld=title >< /span >< /TD >
< TD >< span datafld=price >< /span >< /TD >
  < TD >
< table datasrc=#xmldso datafld=author > 
< tr >< td >< span datafld="$Text" >< /span >< /td >< /tr >
< /table > 
< /TD >  
< /TR > 
< /TABLE >  
 
结果如下: 
 

既然能够浏览多笔资料,最好能加上换页功能,而做法只要再配合两个属性-Table标签的id及datapagesize属性,以及简短的程式就可以达成,范例如下: 
< HTML > 
< HEAD > 
< TITLE >< /TITLE >
< xml id="xmldso" src="Books.xml" >< /xml >
< script ID=clientEventHandlersVBS LANGUAGE=vbscript >
< !-- 

Sub button1_onclick 
  Table1.previousPage 
End Sub

Sub button2_onclick   Table1.nextPage 
End Sub

-- > 
< /script >
< /HEAD >
< BODY > 

< TABLE WIDTH=100% BORDER=1 datasrc=#xmldso  id=Table1 datapagesize=2 > 
< THead > 
< TD >书号< /TD >< TD >书名< /TD >< TD >价格< /TD >< TD >作者< /TD > 
< /THead >
< TR >
< TD >< span datafld=isbn >< /span >< /TD > 
< TD >< span datafld=title >< /span >< /TD > 
< TD >< span datafld=price >< /span >< /TD >
< TD > 
< table datasrc=#xmldso datafld=author > 
< tr >< td >< span datafld="$Text" >< /span >< /td >< /tr > 
< /table > 
< /TD > 
< /TR >
< /TABLE > 

< INPUT type="button" value="上一页" id=button1 name=button1 > 
< INPUT type="button" value="下一页" id=button2 name=button2 >  

< /BODY > 
< /HTML >  
DataIsland4.htm 
结果如下: 

  资料系结小技巧
 
对于资料系结也有许多小技巧,例如提供超连结、跑马灯的效果或者TextBox系结提供编修资料的功能,范例如下: 
< HTML >
< HEAD >
< TITLE >< /TITLE >
< xml id="xmldso" src="Books.xml" >< /xml >
< /HEAD > 
< BODY >

< TABLE WIDTH=100% BORDER=1 datasrc=#xmldso id=Table1 datapagesize=2 >
< THead > 
< TD >书号< /TD >< TD >书名< /TD >
< TD >价格< /TD >< TD >出版商< /TD >
< TD >作者< /TD > 
< /THead > 
< TR > 
  < TD > < span datafld=isbn dataformatas=HTML >< /span > < /TD > 
  < TD > < a datafld=details >< span datafld=title >< /span >< /a >< < /TD > 
  < TD > < MARQUEE datafld=price >< /MARQUEE > < /TD > 
  < TD > < INPUT type="text" id=text1 name=text1 datafld=publisher > < /TD > 
< TD >
< table datasrc=#xmldso datafld=author >
< tr >< td > 
  < font color=red >   < span datafld="$Text" >< /span > < /font > 
< /td >< /tr >
< /table >
< /TD >
< /TR >
< /TABLE >

< /BODY > 
< /HTML >  
DataIsland4.htm 
结果如下: 
 

  结 论
 
看过了以上几个范例,读者会真正了解本文第一段所谈到资料系结的好处,使用上极为简单易用。不过应用方式及小技巧不少,如果能妥善运用,对于资料的展现以及维护都会比使用ASP.NET和HTML标签混杂的程式容易许多。 
虽然展现快速容易,但是仍然有不足的地方,也就是弹性较小。如果想要做到更复杂的功能则就很困难,例如想要根据栏位内容来做排序,这就要另外结合XSL技术或ASP.NET技术重新查询资料库。如果不需要复杂的功能,上面的这些范例就能够解决掉大部分只需简单展现的页面。  
在下一期的文章中会再结合XML的魔法师XML DOM(XML Document Object Model),完全整合这四期文章的技术,让XML充满无限的变化。  
 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
XML轻松学习手册(5)XML实例解析
2种在HTML中绑定XML数据的方法
HTML操作XML数据岛,数据绑定
我的XML学习笔记
html读取xml数据实例一
如何在HTML中引用XML数据
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服