基于XSLT的动态搜索技术研究与实现

时间:2022-10-18 07:28:10

基于XSLT的动态搜索技术研究与实现

摘要:利用XSLT将XML文档转换成格式化过的HTML代码的方法的提出,避免了Ajax中使用JavaScipt动态遍历XML节点来创建结果表格所导致创建一个大字符串所引发的种种问题,提高了代码的可维护性,改善了网络性能。

关键词:动态搜索;Ajax;XSLT

中图分类号:TP393文献标识码:A 文章编号:1009-3044(2007)04-10991-01

1 引言

随着信息访问量和传输量的不断加大,传统的Web搜索所采用的同步交互方式显示出越来越明显的问题,大大损失了浏览器端和服务器端的交互性,降低了搜索的用户体验度。利用Ajax通过在服务器端创建一个XML文档,然后在客户端使用JavaScript代码调用XML的DOM方法来遍历XML节点并创建结果表格的做法可以使问题得到改善。但是,该技术的缺陷在于,这个过程需要遍历全部数据并且动态创建表格。如果将来需要修改表格的格式,由于表格很复杂,添加或者减少栏目都可能会引起问题。避免这些问题的方法就是使用XSLT。通过Ajax,可以将XSLT文件和XML文档合并,由XSLT动态生成HTML表格,并显示结果,从而避免手工调用DOM方法的繁琐,也进一步改善了网络性能,提高了搜索用户的体验度。

2 利用XSLT来创建动态搜索

XSLT(Extensible Stylesheet Transformation Language)是一种用来转换XML文档结构的语言。利用XSLT可以在文件之外创建HTML布局,并且通过将它与XML文档合并的方式来对数据进行格式化,从而由XSLT文件来完成导航XML节点、创建表格、菜单和HTML布局等所有烦琐的工作。利用Ajax技术可以实现从服务器上得到静态或动态的XML文件和XSLT文件,在客户端将它们合并,从而实现创建HTML文档的目的。

2.1 XSLT文档的创建

当创建XSLT转换文档的时候,需要声明XML的版本和编码,以及指定XSLT的名字空间。名字空间提供了文档所期望遵循的规则和规范。XSLT名字空间中使用前缀xsl来定义所有的元素,然后设置匹配模式的模版规则,这个模式可以引用整个文档。接下来还要创建显示结果的表格模板。这个过程需要添加table标签,给表格设置一个ID,然后插入表格的表头行,其中包含了显示给用户的列名,以便用户理解用来显示搜索结果的表格中每列包含的信息含义。以一个显示论文列表信息的模板为例来创建一个XSLT文档。内容如下所示:

定义了表格的头部信息之后,还需要通过遍历源节点集来得到表格中剩余的行。为了完成这个工作,使用for-each循环来对记录进行遍历,以获得存放搜索结果的XML文件中的源树节点,如paperInfo/entry中的节点。当遍历文档树的时候,可以通过value-of来从源树中取出XML元素的值,然后将它添加到转换的输出流中。

2.2 合并XSLT和XML文档

创建好XSLT文件以后,接下来是利用JavaScript代码在客户端将XSLT和XML文件进行合并以及利用XSLT将指定的XML文件组织成可视化的表格。这里假设客户端所使用的浏览器为微软的IE。合并及转换XML文档的文件内容如下所示:

首先,引入了一个send.js文件,用来完成所有确定如何向浏览器发送信息的工作,并将代码隐藏在一个易于使用的封装对象中供合并转换文件使用。然后,声明三个全局变量来保存三个不同的对象。接着,可以通过调用LoadXMLXSLTDoc()函数来完成合并和转换工作。最后,是两次调用send.js文件中的ContentLoader,一次是为了获取XML文档,一次是为了获取XSL文档。在每次调用时,ContentLoader得到URL,然后调用另外一个函数来加载这个文档。onXMLLoad()将返回的XML结果加载到全局变量xmlDoc中,接着调用函数doXSLT()做进一步的处理。onXSLTLoad()将XSL文档加载到全局变量xslDoc中,也会调用函数doXSLT()。在加载两个文档的过程中,需要通过检查变量xmlDoc和xslDoc是否包含各自的文档来确定它们是否加载结束。函数doXSLT()用来判断哪个文档首先加载结束。该函数会被调用两次,分别在XML文档加载完之后和XSL文档加载完之后。第一次调用的时候,如果两个全局变量中有一个设置为null,函数直接退出。下一次调用时,因为两个全局变量都不是null,函数不再退出。两个文档加载完成之后,就执行XSLT转换。

在IE中实现XSLT转换XML文档之前,需要先判断IE是否支持transformNode()方法,判断的方法是if(window.ActiveXObject){…}。如果浏览器支持这个方法,就调用含有XML数据的全局变量上的transformNode()方法,并将含有XSLT数据的全局变量传递给它。将转换的结果加在结果元素的innerHTML上,这样它就包含了最后格式化了的搜索结果。

为了实现动态搜索的功能,还需要编写从数据库获取查询结果以及将查询结果组装成XML文件的程序代码,这些工作也完成之后,就可以通过搜索条来实现论文信息的动态搜索功能。在文本框中输入电子商务关键词,单击搜索按钮,搜索结果以表格的形式动态生成,如图1所示:

图1 Ajax和XSLT动态搜索显示结果

3 结论

通过使用Ajax和XSLT技术来创建动态搜索,可以将XML文档转换成HTML布局。同时,它对动态生成的XML文档按照基于树的方式来做转换,代替了以往依赖服务器端代码和JavaScript手工解析的过程,提高了网络吞吐量,改善了网络的性能。同时,XSLT转换的代码更加容易维护,更有利于构建具有良好开放性、可重用性和一定的灵活性的搜索系统。

参考文献:

[1]梁民,汪伟.基于Ajax技术开发Web应用[J].电脑知识与技术,2006,05.

[2]方俊.Ajax引擎的设计与应用[J].电脑与信息技术,2006.6,(14,3).

[3]吴晓丹,王志坚.利用XSLT转换XML文档的应用[J].现代

本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:基于WebGIS的机房管理系统设计与实现 下一篇:网络安全技术与观点