DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 用XML數據島解決用戶界面問題
用XML數據島解決用戶界面問題
編輯:XML詳解     
從屬列表問題(dependent list problem)"的問題時常被提出。問題時常出現於當你有兩個以上的選擇列表時,一個主列表有若干個選項,你希望當用戶選擇主列表中的某個選項時,在其他的從屬列表中顯示相關的選項。你可以通過eXtensible Markup Language(XML)的數據島(data islands)來實現這一功能,把XML內嵌到你的Html中。這一結果對在客戶端的XML應用具有實踐意義。

  假設你為一家名為"CheapPc"的公司工作,你負責讓訪問公司網站的用戶找到用戶所在州的"CheapPc"商店。在公司網站上你列出了州名的列表。當一個顧客在主列表中點擊選擇一個州時,你希望在從屬列表中顯示相關的商店列表。

  問題在於:你怎樣填充從屬列表而不用刷新該頁面或不用每次用戶在主列表中選擇時都向服務器發送消息?XML數據島完美地解決這一問題。當用戶發出請求,所有商店的數據都連接成一個XML字符串(Listing 1)。返回的結果是一個鑲嵌在Html頁面中的數據島。該數據島使用以下XML結構:

  

  

  

  

  

  1

  Birmingham

  


  

  2

  Huntsville

  


  


  

   ...etc.

  


  


 根元素包含州名的列表,每個州名的列表依次包含商店的列表。每個商店都有一個相應的ID和城市名。為了生成這一XML字符串,你得用ActiveX Data Object(ADO)查詢數據庫,並用XML標記符格式化查詢結果。把記錄集數據格式化成Html表格和把記錄集數據格式化成XM文件之間有一些不同。在本文的後半部分,我將向你展示如何避免過多的串聯工作以提高響應時間。你可以點擊這裡下載例程。
把處理過程移到客戶端

  當Web服務器返回網頁後,所有進一步的操作處理都在客戶端進行。我原先認為如果向客戶端發送一個大的數據集會使程序的速度放慢。但後來我卻發現一次性發送所有數據比在客戶與服務器之間來回地進行數據交換快得多。唯一可被注意到的停頓只是在IE5的XML解析器讀取數據時的一個短暫的初始化停頓。

  Html文件本身包含有4個元素:一個保存州名數據的選擇列表(主列表),XML數據,一個從屬列表的div標記占位符,和兩個腳本。當州名選擇列表的選項發生變化時,第二個腳本就執行(Listing 2)。

  你希望每次用戶選擇一個州時都能從數據島重新得到相應的商店列表。所以你需要一個腳本去處理州名選擇列表的onChange事件:

  

在這個腳本中重新得到了州名選擇列表的值:

  Dim stateCode

  stateCode=document.all.State.value

  接著重新得到所選定州的商店列表。你可以通過兩個方法得到這個列表。第一個辦法就是獲得<XML>標記符的記錄集屬性的引用:

  Dim R

  Set R = XMLdata.recordset

通過這個方法得到的記錄集是一個標准的ADO記錄集對象,字段名都與標記符相對應。這個方法只有在每個記錄都有同樣的字段的"簡單"XML數據文件中才能很好地工作。

  第二個方法就比較強大和普遍。IE5把XML數據島象其他Html元素一樣對待。為了在客戶端訪問XML數據,你只需通過ID來引用該元素。IE5將返回XML樹的根元素(document元素):

  set xml = document.all("XMLdata")

  你用這個document元素可以執行Extensible Stylesheet Language (XSL)查詢語句。使用XSL查詢語句,你可以得到某個給定層次上的節點列表,包含指定屬性的節點列表,或以上兩者的任意組合。例如,以下的查詢語句返回所有符合用戶所選州的商店節點:
Dim nodes

  set nodes = XML.selectNodes ("locations/state[@code='" & stateCode & "']/store")

XSL搜索字符串看起來很象一個文件路徑;它有XML樹相應各層次的值。用"/"分隔每個層次。以"節點=數值"的匹配方式加到相關節點的"[]"中搜索指定數值的節點,在屬性名前加上"@"來搜索包含指定屬性的節點。運行selectNodes方法將返回一個IXMLDOMNodes集合對象。最後,顯示從屬列表。最簡單的方法:根據XSL查詢語句返回的節點列表來改變從屬列表的
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved