天天看点

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中。你在刷新当前页面或者重新加载后刚才新增的记录则会丢失.