GB | BIG5
|
| 首頁 > 編程技術 > XML/WML > 正文 |
 |
| XML技術系列講座(6)XML與HTML的結合(下) |
| 本文出自:http://www.computerworld.com.cn 作者: 北京郵電大學 張劍 (2002-02-08 07:15:00) |
|
一般情況下,我們從數據庫中查詢得到的結果集可能很大,所以從服務器返回到客戶端時,數據會被分成若幹個頁面分別進行傳遞。此時,利用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屬性; |
|
注意這裡的DATAFLD屬性必須設定為“$TEXT”, |
|
<TABLE BORDER=1 DATASRC=“#xmldso”> |
|
<THEAD><TR><TH>Title</TH> |
|
<TH>Author</TH></TR></THEAD> |
|
<DIV DATAFLD=“title”></DIV></TD> |
|
<TABLE BORDER=0 DATASRC=“#xmldso” DATAFLD=“author”> |
|
<TR><TD><SPAN DATAFLD=“$Text”></SPAN></TD></TR> |
|
事實上,使用DSO效果最好的情況是針對結構對稱的數據,而處理非對稱數據更有效的辦法是使用我們以將要介紹的DOM技術。 |
|
用DSO訪問元素的屬性很簡單,可以直接把屬性按子元素來處理。 |
|
<book isbn=“9-001-122-12”> |
|
這樣,在綁定到HTML表格中時,就可以直接按子元素來處理: |
|
<TD><SPAN DATAFLD=“isbn”> </SPAN></TD> |
|
如果遇到屬性名和子元素名一樣的情況,在元素名前加上“!”進行區分。 |
|
DSO把XML數據島當做ADO記錄集進行處理的一大好處是可以利用ADO提供的各種方法對數據源進行訪問,尤其是當把數據島與類似SPAN、DIV和INPUT等HTML元素綁定時。通常這些元素顯示的是記錄集的首條記錄,要想對記錄集進行遍歷瀏覽,可以使用ADO的方法 : Move、MoveFirst、MoveLast、MoveNext和MovePrevious。比如創建一個按鈕響應函數,只要用戶點擊“Next”按鈕,就可以逐條瀏覽相應的記錄。 |
|
<XML ID=“xmldso” SRC=“books.xml”> |
|
xmldso.RecordSet.MoveNext |
|
有些用戶比較習慣編寫Script語言,利用DSO技術同樣可以與各種Script很好地結合在一起。 |
|
例如(以VB Script為例),訪問記錄集時,代碼如下: |
|
Set rsBooks = xmldso.RecordSet |
|
sTitle = rsBooks(“title”) |
|
可以使用innerText和innerHTML屬性把得到的值傳遞給HTML元素。例如,有一個DIV元素名為divTitle,賦值代碼如下所示: |
|
divTitle.innerTEXT = sTitle |
|
利用腳本程序還可以處理許多DSO事件,下表列舉了其中的一部分事件: |
| 事件 |
觸發事件 |
響應 |
| onDataAvailable |
新數據準備就緒 |
當前運行狀態中記錄集中條目的個數 |
| onDataSetComplete |
數據源中的所有數據已經到達 |
顯示數據,或返回一個確認消息 |
| onDataSetChanged |
記錄集中的數據修改完畢,可以訪問 |
顯示更新的數據 |
| onRowEnter |
當前記錄指針已經移動 |
在顯示數據前對數據進行必要的格式化 |
|
|
在腳本中處理各種事件的方法就是在<SCRIPT>標簽中使用FOR屬性指定XML數據島ID,使用EVENT屬性確定事件類型。 |
|
<SCRIPT Language=“VB Script” FOR=“xmldso” EVENT=“onDataAvailable”> |
|
lblRecords.value = booklist.RecordSet.RecordCount |
|
除了顯示記錄數據之外,腳本程序還可以對記錄集進行快速查詢、排序、編輯等操作。但要指出的是,雖然ADO技術中提供了類似SortColumn和SortAscending等方法對XML數據進行排序,但是效果不如XSL中的排序操作,所以建議大家充分利用XSL技術來實現這部分功能。 |
|
 |
★ 樊強制作 歡迎分享 ★ |
|