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