隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0

          導航

          <2008年4月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          公告

          關注我的新浪微博

          我的著作









          常用鏈接

          留言簿(126)

          我參與的團隊

          隨筆分類(818)

          隨筆檔案(310)

          文章分類(1)

          文章檔案(8)

          相冊

          ADSL、3G查詢

          CSDN

          eclipse

          ibm

          Java EE

          Linux

          Web

          云服務

          代理網站

          關注的網站

          協議

          喜歡的Blog

          國內廣告平臺

          圖書出版

          在線培訓

          開發工具

          微博客戶端

          手機鈴聲

          操作系統

          • ReactOS
          • 一個與windowXP/2003兼容的操作系統

          數學

          文件格式

          源碼資源

          移動(Mobile)

          編程語言

          英語學習

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1973567
          • 排名 - 6

          最新評論

          閱讀排行榜

          評論排行榜

          【轉載】Web Services&XML:XML與HTML的結合(數據島的應用)

              目前,許多Web網站的內容數據都存放在數據庫或數據文件中。對于Web程序開發人員來說,如果要想把有用的信息從數據庫中提取出來,傳統的方法 是在服務器端編寫腳本程序(如VBScript、javascript、CGI、ASP、Perl等等),通過對數據庫執行SQL查詢得到相關記錄,然后 把查詢結果組織成HTML頁面返回給客戶端,用戶使用瀏覽器觀察最終結果。

          為了提高系統服務的靈活性、可擴展性,使服務對象范圍更 廣,許多商業網站都盡可能地把商務規則、原始數據和表現形式當做相互獨立的服務分別提供。HTML那種蘊數據于顯示之中的方式顯然不合乎這種需求。因此, 把原始數據存放在XML文檔中,使用樣式單文件顯示內容是XML技術適合于電子商務的優勢所在。但從本質上來說,XSL技術不是面向數據顯示的,它是一種 格式轉換技術,在顯示手段和方式上都遠不及HTML那樣豐富。對編程人員來說,一種較為理想的方案是把HTML和XML兩種技術相結合,優勢互補,使真正 的原始數據在能夠保持本來意義和結構的同時,還能充分利用HTML那千變萬化的顯示技巧。XML數據島就是這種技術融合的產物,它使用< XML>標簽把XML數據直接嵌入到HTML頁面中,從而實現了二者的優勢互補。

          IE中數據島的處理方式

          為了能夠處理這種內嵌XML代碼的HTML頁面,Internet Explorer 4.0(以下簡稱IE 4.0)引入了DSO(Data Source Objects,數據源對象)技術,用Java Applet實現。

          例如:

          < APPLET CODE=“com.ms.xml.dso.XMLDSO.class”
          ID=“xmldso” WIDTH=0 HEIGHT=0 MAYSCRIPT=TRUE>

          < PARAM NAME=“URL” value=“myXML.xml”>

          < /APPLET>

          上述例子中,CODE屬性指明了DSO Java小程序,MAYSCRIPT屬性保證用戶端腳本能夠處理數據對象,PARAM標簽指明了XML文檔的位置。

          使用Java的局限性在于只能在HTML文檔中說明XML的URL地址,而不能直接將XML標簽嵌入其中,這就和真正的數據島方案還有一定的差距。微軟 在Internet Explorer 5.0(以下簡稱IE 5.0)中對DSO技術進行了擴展,突破了以往的限制,使HTML和XML真正地融合到了一起。HTML頁面中支持直接使用< XML>標簽。

          例如:

          < HTML>
          < XML ID=“xmldso”>

          < ?xml version=“1.0”?>

          some XML……

          < /XML>

          只要保證每個數據島的ID都是唯一的,就可以在頁面中的任何必要的地方嵌入數據島,并且這些DSO彼此都是相互獨立的。

          除了上面例子中的這種直接嵌入方式,還可以使用外部引用方式鏈接數據島。

          例如:

          < XML ID=“xmldso” SRC=“myXML.xml”>
          < /XML>

          這樣,只有當公司的客戶對象繼續使用IE 4.0,并且為了解決這部分客戶的兼容性問題時,Java Applet才是編程人員要考慮的選擇方案。

          在IE 5.0所實現的DSO技術中,如果數據是通過SQL語言對數據庫進行查詢得到的結果,那么就把它們存放在ADO(ActiveX Data Objects)記錄集中。服務器把這種ActiveX控件(通常是ADO記錄集)發送到客戶端,由客戶端腳本程序做進一步的處理。實際上,IE 5.0就是把XML數據島作為一種特殊的ADO記錄集進行處理的。

          XML的數據綁定

          1.ADO記錄集的映射

          XML中的每一條主元素都被映射為ADO記錄集中的一條記錄,而子元素則相應地被映射到記錄集中的字段(也稱為域)。

          例如,存在XML數據島books.xml如下:



          < XML ID=“xmldso”>
          < ?xml version=“1.0”?>

          < booklist>

          < book>

          < title>Straight Talk About Computers< /title>

          < isbn>72-80088-005< /isbn>

          < /book>

          < book>

          < title> Gourmet Microwave < /title>

          < isbn>72-80081-082< /isbn>

          < /book>

          < /booklist>

          < /XML>

          此時,映射后的ADO記錄集為:

          title isbn

          Straight Talk About Computers 72-80088-005

          Gourmet Microwave 72-80081-082

          2.與HTML元素的綁定

          在HTML文檔中嵌入數據島之后,就可以將XML數據島與HTML元素綁定在一起。每一個DSO條目(即數據島)都有唯一的ID號。首先將HTML元素 中的DATASRC屬性設置為相應的ID,就可以把HTML元素和數據島聯系在一起。然后再通過設置DATAFLD屬性值,來確定所提取的XML元素。

          例如,與DIV元素綁定的代碼如下:

          < DIV ID=title DATASRC=#xmldso DATAFLD=“title”>< /DIV>
          < DIV ID=price DATASRC=#xmldso DATAFLD=“isbn”>< /DIV>

          注意:并非所有的HTML元素都能與XML數據島綁定。目前,支持這種DSO綁定機制的元素如下:

          A、APPLET、BUTTON、DIV、FRAME、IFRAME、 IMG、INPUT (此處類型是:CHECKBOX、HIDDEN、 LABEL、PASSWORD、RADIO和TEXT)、LABEL、 MARQUEE、SELECT、SPAN、TABLE和 TEXTAREA。

          3.以表格方式顯式XML數據

          若把XML數據與TABLE元素綁定在一起,就可以自動地顯示為多行的表格形式。

          例如,XML數據與TABLE元素綁定的代碼如下:

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

          < TR>< TH>Title< /TH>

          < TH>ISBN< /TH>< /TR>

          < /THEAD>

          < TBODY>

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

          < TD>< DIV DATAFLD=“isbn”>

          < /DIV>< /TD>< /TR>

          < /TBODY>

          < /TABLE>

          這樣,通過將TABLE元素中的DATASRC屬性設定為#xmldso,把兩者綁定起來。表格內部分為表頭(THEAD)和表體(TBODY)兩部 分。每一個< book>元素都會顯示為一行表格,具體每一欄顯示哪一項數據,則由DIV元素中的DATAFLD屬性指定。

          一般情況下,我們從數據庫中查詢得到的結果集可能很大,所以從服務器返回到客戶端時,數據會被分成若干個頁面分別進行傳遞。此時,利用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對象的操作都是在用戶端完成的,實際上是服務器數據對象的一份復制品,這樣做的好處是避免了網絡承受大量數據通信的負 擔。但這時用戶端所做的任何操作對服務器上存儲的數據毫無影響,如果要想對服務器記錄也進行修改,那么就要用到客戶端與服務器端的數據交換技術,我們將在 以后對此進行介紹。



          中國人

          原文地址:http://webdev.csdn.net/page/337792ab-1086-4b0e-bef3-d6d2ecc810a6





          Android開發完全講義(第2版)(本書版權已輸出到臺灣)

          http://product.dangdang.com/product.aspx?product_id=22741502



          Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


          新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

          posted on 2008-04-23 09:55 銀河使者 閱讀(563) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 漯河市| 沁阳市| 眉山市| 龙海市| 福泉市| 成武县| 桐庐县| 石嘴山市| 浦北县| 扎兰屯市| 定日县| 宁陵县| 古浪县| 界首市| 洛隆县| 嘉义县| 延边| 渭源县| 武强县| 海晏县| 平昌县| 昆山市| 乌拉特中旗| 吴旗县| 额尔古纳市| 五常市| 杭州市| 石泉县| 若尔盖县| 彰化县| 雷波县| 福安市| 兴海县| 上虞市| 鄂伦春自治旗| 巴彦淖尔市| 达孜县| 墨玉县| 巴林右旗| 太康县| 镇平县|