XML的嵌套處理
一般情況下我們從數據庫中查詢得到的結果集可能很大所以從服務器返回到客戶端時數據會被分成若干個頁面分別進行傳遞此時利用TABLE元素中的DATAPAGESIZE屬性可以指定每個頁面包含記錄集條目的個數
例如
<TABLE DATASRC=#xmldso DATAPAGESIZE=>
很顯然如果XML數據格式是對稱的則無論是映射到ADO記錄集還是綁定到表格元素上效果都會很好而在實際應用中XML數據為非對稱的例子也很多比如一本書的作者可能就不止一位這在映射和綁定時都會產生一定的麻煩解決問題的辦法就是利用嵌套每一行表格仍對應一條主元素每一欄也對應著一個子元素對於重復元素則使用嵌套的表格我們假設在booksxml中第一本書的作者為Dean Straight第二本書的作者為Charlotte CooperShelley Burke和Regina Murphy此時綁定過程如下
● 創建TABLE元素並將數據島ID賦值給DATAFLD屬性
● 對於單獨的XML元素如<isbn>創建TD元素並設定相應的DATAFLD屬性
● 對於重復元素在TD元素內部嵌套一個表格
● 用單行單列的形式顯示作者信息
注意這裡的DATAFLD屬性必須設定為$TEXT
以保證嵌套元素的內容被全部顯示在指定的元素中
完整的HTML代碼如下所示
<TABLE BORDER= 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= DATASRC=#xmldso DATAFLD=author>
<TR><TD><SPAN DATAFLD=$Text></SPAN></TD></TR>
</TABLE>
</TD>
</TR></TBODY>
</TABLE>
事實上使用DSO效果最好的情況是針對結構對稱的數據而處理非對稱數據更有效的辦法是使用我們以後將要介紹的DOM技術
DSO技術的應用
. 訪問元素的屬性
用DSO訪問元素的屬性很簡單可以直接把屬性按子元素來處理
例如
<book isbn=>
……
</book>
這樣在綁定到HTML表格中時就可以直接按子元素來處理
<TD><SPAN DATAFLD=isbn> </SPAN></TD>
如果遇到屬性名和子元素名一樣的情況在元素名前加上!進行區分 .遍歷記錄集
DSO把XML數據島當做ADO記錄集進行處理的一大好處是可以利用ADO提供的各種方法對數據源進行訪問尤其是當把數據島與類似SPANDIV和INPUT等HTML元素綁定時通常這些元素顯示的是記錄集的首條記錄要想對記錄集進行遍歷浏覽可以使用ADO的方法 : MoveMoveFirstMoveLastMoveNext和MovePrevious比如創建一個按鈕響應函數只要用戶點擊Next按鈕就可以逐條浏覽相應的記錄
例如
<XML ID=xmldso SRC=booksxml>
</XML>
Sub btnNext_onclick()
xmldsoRecordSetMoveNext
End Sub
.與Script語言相結合
有些用戶比較習慣編寫Script語言利用DSO技術同樣可以與各種Script很好地結合在一起
例如(以VB Script為例)訪問記錄集時代碼如下:
Dim rsBooks
Set rsBooks = xmldsoRecordSet
訪問字段(子元素)的值
Dim sTitle
sTitle = rsBooks(title)
可以使用innerText和innerHTML屬性把得到的值傳遞給HTML元素例如有一個DIV元素名為divTitle賦值代碼如下所示
divTitleinnerTEXT = sTitle
利用腳本程序還可以處理許多DSO事件下表列舉了其中的一部分事件
在腳本中處理各種事件的方法就是在<SCRIPT>標簽中使用FOR屬性指定XML數據島ID使用EVENT屬性確定事件類型
例如獲取記錄集中條目的個數
<SCRIPT Language=VB Script FOR=xmldso EVENT=onDataAvailable>
lblRecordsvalue = booklistRecordSetRecordCount
</SCRIPT>
除了顯示記錄數據之外腳本程序還可以對記錄集進行快速查詢排序編輯等操作但要指出的是雖然ADO技術中提供了類似SortColumn和SortAscending等方法對XML數據進行排序但是效果不如XSL中的排序操作所以建議大家充分利用XSL技術來實現這部分功能
其余的功能如利用腳本對記錄集進行諸如增加刪除修改等操作或是分頁顯示HTML表格等等在這裡就不一一舉例說明了用法與前面的操作大同小異最後需要說明的是所有對DSO對象的操作都是在用戶端完成的實際上是服務器數據對象的一份復制品這樣做的好處是避免了網絡承受大量數據通信的負擔但這時用戶端所做的任何操作對服務器上存儲的數據毫無影響如果要想對服務器記錄也進行修改那麼就要用到客戶端與服務器端的數據交換技術我們將在以後對此進行介紹
From:http://tw.wingwit.com/Article/program/net/201311/11641.html