首頁  >  文章  >  web前端  >  XML與HTML之間的優勢互補(下)

XML與HTML之間的優勢互補(下)

零下一度
零下一度原創
2017-05-02 15:12:211569瀏覽

一般情況下,我們從資料庫中查詢得到的結果集可能很大,所以從伺服器返回客戶端時,資料會被分成若干個頁面分別進行傳遞。此時,利用TABLE元素中的DATAPAGESIZE屬性可以指定每個頁麵包含記錄集條目的數量。

例如:

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

很顯然,如果XML資料格式是對​​稱的,則無論是映射到ADO記錄集還是綁定到表格元素上,效果都會很好。而在實際應用中,XML資料為非對稱的例子也很多,例如一本書的作者可能不只一位,這在映射和綁定時都會產生一定的麻煩。解決問題的方法就是利用嵌套。每一行表格仍對應一條主元素,每一欄也對應一個子元素。對於重複元素,則使用嵌套的表格。我們假設在books.xml中,第一本書的作者為Dean Straight,第二本書的作者為Charlotte Cooper、Shelley Burke和Regina Murphy。此時,綁定過程如下:

● 建立TABLE元素,並將資料島ID賦值給DATAFLD屬性;

● 對於單獨的XML元素,如779f037fdfb9ec1a636bb2bbe2cffba5,建立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>

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

<TD><p DATAFLD=“isbn”>

</p></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、p和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元素。例如,有一個p元素名為pTitle,賦值程式碼如下所示:



pTitle.innerTEXT = sTitle

#利用腳本程式還可以處理許多DSO事件,下表列舉了其中的一部分事件:


在腳本中處理各種事件的方法就是在03c6714b8e3ee3238fc596020c4901e1標籤中使用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物件的操作都是在用戶端完成的,實際上是伺服器資料物件的複製品,這樣做的好處是避免了網路承受大量資料通訊的負擔。但這時用戶端所做的任何操作對伺服器上儲存的資料毫無影響,如果要想對伺服器記錄也進行修改,那麼就要用到客戶端與伺服器端的資料交換技術,我們將在以後對此進行介紹。                        

以上是XML與HTML之間的優勢互補(下)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn