IE中資料島的處理方式
為了能夠處理這種内嵌XML代碼的HTML頁面,Internet Explorer 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>标簽。
在IE 5.0所實作的DSO技術中,如果資料是通過SQL語言對資料庫進行查詢得到的結果,那麼就把它們存放在ADO(ActiveX Data Objects)記錄集中。伺服器把這種ActiveX控件(通常是ADO記錄集)發送到用戶端,由用戶端腳本程式做進一步的處理。實際上,IE 5.0就是把XML資料島作為一種特殊的ADO記錄集進行處理的。
xml檔案:users.xml
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="1">
<name>張三</name>
<age>24</age>
<sex>男</sex>
</user>
<user id="2">
<name>李四</name>
<age>27</age>
<sex>女</sex>
</user>
<user id="3">
<name>王五</name>
<age>32</age>
<sex>女</sex>
</user>
</users>
html檔案:xml.html
<html>
<head>
</head>
<script type="text/javascript">
function Previous()
{
if(!myUser.recordset.EOF)
{
myUser.recordset.MovePrevious();
if(myUser.recordset.BOF)
{
myUser.recordset.MoveFirst();
}
}
}
function Next()
{
if(!myUser.recordset.BOF)
{
myUser.recordset.moveNext();
if(myUser.recordset.EOF)
{
myUser.recordset.moveLast();
}
}
}
</script>
<body>
<xml src="users.xml" id="myUser">
</xml>
<table>
<tr>
<td>
ID</td>
<td>
<input type="text" id="id" datasrc="#myUser" datafld="id" />
</td>
</tr>
<tr>
<td>
姓名
</td>
<td>
<input type="text" id="txtName" datasrc="#myUser" datafld="name" />
</td>
</tr>
<tr>
<td>
性别
</td>
<td>
<input type="text" id="txtSex" datasrc="#myUser" datafld="sex" />
</td>
</tr>
<tr>
<td>
年齡
</td>
<td>
<input type="text" id="txtAge" datasrc="#myUser" datafld="age" />
</td>
</tr>
<tr>
<td colspan="2">
<input type="button" id="p" οnclick="Previous()" value="前一條" />
<input type="button" id="next" οnclick="Next()" value="後一條" />
</td>
</tr>
</table>
</body>
</html>
這裡在注意的是:不管是xml檔案還是html檔案用記事本建立的話,一定要儲存格式為utf-8,否則效果出不來!
還有一點就是不能讓table綁定資料源.否則将會把所有資料一次顯示出來.但這樣可以在table元素中加上另外一個屬性
datapagesize來控制目前面頁中顯示記錄的條數.前一種類似fromview樣式.而後一種則更像gridview.
在這裡還可以加一個新按鈕實作增加一條新記錄的功能.
<input id="Add" TYPE=button value="添加新記錄" οnclick="theXMLisland.recordset.addNew()">
但這裡還要注意的是:點選建立記錄後,你建立的記錄在你選擇上一條,下一條時會顯示出來,但不會增加到資料源的XML中。你在重新整理目前頁面或者重新加載後剛才新增的記錄則會丢失.