第8章 数据岛
数据岛允许我们在HTML页面中集成XML,对XML编写脚本,而无需通过脚本或<OBJECT>标签读取XML。几乎任何能够存在于一个结构完整的XML文档中的东西都能存在于一个数据岛中。通过数据岛我们以HTML网页中任一种形式显示XML数据岛数据,如表格、表单或分页显示等。
本章知识要点:
掌握数据岛定义
熟练掌握数据岛绑定和形式
掌握数据岛元素绑定方式
熟练掌握DSO概念
掌握DSO操作XML数据岛数据
熟练掌握DSO遍历数据岛数据
熟练掌握分页显示数据岛数据
掌握通过DSO和XSL前后显示样式
8.1 数据岛概述
当我们在HTML文档中通过使用XML标记来嵌入XML数据时,就在HTML文档中形成一个XML数据岛。数据岛是指存在于HTML页面中的XML数据。XML数据可以包含在HTML文件内,也可以包含在某外部文件内,利用XML数据岛可以让我们免除编写复杂脚本的麻烦。
8.1.1 数据岛定义
XML数据岛(data islands)就是被HTML页面引用或者包含的XML数据,即存在于HTML页面中的XML代码,是从IE5开始引入的一项技术。可以通过XML标签很轻松将数据岛插入到HTML文档中。那么怎么访问XML数据岛的数据呢,很简单,通过XML的ID。在页面中的数据岛和其他的XML数据一样,可以通过标准的DOM方法来进行访问。
8.1.2 数据岛绑定
数据绑定就是将XML数据岛可以绑定到HTML元素上(比如表格)。在下面的例子中,一个XML数据岛被从外部XML文档载入。一个HTML的表格绑定到此数据岛上。HTML表格内部的span元素使用datafld属性和XML文档相应的XML元素相互绑定。
8.2 数据岛应用
显示XML文档中数据的形式有多种,可以CSS样式表单、XSL样式表单和数据岛技术。数据岛技术相对于前两种技术更加容易简单。
8.2.1 数据岛使用形式
数据岛有两种定义方式,一种是直接将上述XML数据嵌入到HTML页面中,另一种是见XML数据保存在单独的XML文件中,在HTML页面中引入XML文件中的数据。通过datasrc,datafld属性,可以将XML数据岛绑定到HTML控件。
8.2.2 数据岛访问XML元素内容
在HTML文档中嵌入数据岛之后,就可以将XML数据岛与HTML元素绑定在一起。每一个即数据岛都有唯一的ID号。其过程是首先将HTML元素中的datasrc属性设置为相应的id,就可以把HTML元素和数据岛联系在一起。然后再通过设置datafld属性值,来确定所提取的XML元素。
8.2.3 数据岛访问XML标记属性
如果遇到属性名和子元素名一样的情况,在元素名前加上“!”进行区分,但在实际使用中,需要注意XML文件的数据结构形式。现在创建一个案例,演示使用XML数据岛访问标记属性。
8.3 DSO数据源对象
我们不但可以通过数据岛获取XML文档中的数据,还可以通过DSO数据源对象,进行添加、修改和删除等操作。
8.3.1 DSO概念
为了能够处理这种内嵌XML代码的HTML页面,Internet Explorer 4.0(以下简称IE 4.0)和其以上的版本引入了DSO(Data Source Objects,数据源对象)技术。XML DSO是一个Microsoft ActiveX控件,嵌入到Microsoft Internet Explorer中,利用嵌入的控件,DSO有助于格式化数据并将这些数据显示在HTML页面上,DSO可用于从以下文件提取数据:外部XML文档或嵌入到HTML文档的XML数据。通过DSO可以对嵌入到HTML中的文档的XML数据进行操作,其操作后面会提到。要使用DSO,则根XML元素必须不能具有任何属性。
8.3.2 操作XML数据岛数据
在IE浏览器中,当为XML数据岛创建一个标识符ID的时,实际上就是创建了操作XML数据岛的数据源对象DSO。此处DSO对象可以看作是一个DOM树模型的根节点,即将XML数据岛作为一个加载到内存中的树而处理。DSO对象可以根据DOM的树模型结构对XML数据岛进行添加、删除和修改节点,其执行效果会显示在当前HTML页面的数据上面,但不会影响XML数据岛本身的数据改变。
8.3.3 遍历XML数据岛数据
通过数据源对象DSO可以对数据岛节点进行显示、查询、修改、删除和添加等操作,这些操作的依据是建立在树模型的基础之上的。除此之外,DSO还可以把XML数据岛作为ADO记录集进行处理,这样做的好处是可以利用ADO提供的各种方法对数据源进行访问,尤其是当把数据岛与类似SPAN、DIV和INPUT等HTML元素绑定时。通常这些元素显示的是记录集的首条记录,要想对记录集进行遍历浏览,一个是使用前面我们讲到的表格对象绑定,另外一个是可以使用ADO的方法结合脚本程序完成相应的浏览数据的功能。比如创建一个按钮响应函数,只要用户点击“Next”按钮,就可以逐条浏览相应的记录。
8.3.4 分页显示XML数据岛数据
一般来说,当检索的结果集过大时(经常出现非常大的情况),采取分页数据显示的策略,即每次返回结果集中的小部分数据,通过类似“上一页”、“下一页”的操作来查看更多的结果。用户的期望是提交的检索能够很快得到响应,而且进行“上一页”、“下一页”的操作时也能够很快得到响应。因此,问题的关键在于根据用户提供的记录起始位置和需要记录数量来获取每一次所需要使用的结果数据。
8.4 DSO和XSL切换样式
XML文件可以用来存储数据,样式表单文件XSL或CSS可以用来指定数据显示样式,两者结合起来可以指定数据的显示样式。但在显示时,只有一种样式被显示,因为一个XML文件对应一个样式表单文件。利用DSO数据源对象,我们可以为XML文件指定多个样式表单文件,样我们选择自己喜欢的方式来查看数据。例如每个在客户端浏览信息的人,可以选择自己喜欢的颜色,图片来显示数据,并且不需要把自己的爱好信息发给服务器端,直接在客户端完成,减轻了服务器端的工作量,这样不是更好么。要实现这样的功能,可以把DSO数据源对象和XSL样式表单结合起来。