天天看點

xml資料島的使用

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中。你在重新整理目前頁面或者重新加載後剛才新增的記錄則會丢失.