

XML (eXtensible Markup Language,扩展标记语言) 是一种数据格式[1],它的特点是人们能非常容易读懂其中的含义,例如上面所示的菜单结构就一目了然。不仅仅是人能容易看懂 XML,计算机也能非常容易读懂其中的含义,这句话的含义是处理XML的程序已经非常普及,Windows下有MSXML[5],Java下有JAXP,即几乎所有平台上都有了XML处理程序[7][8]。并且处理XML有标准的办法,比如本文将用到的 XSLT (eXtensible Stylesheet Language Transformation, 扩展样式语言转换)就是将XML格式的数据转化到另外一种格式的标准方法[2][3][4]。
如果我们能用 XSLT 转化上述菜单的XML到网页上的菜单,那么制作网页菜单就比较简单了。因为编辑菜单的XML非常容易,普通的文本编辑器就可以了。
实现网页菜单的DHTML和JavaScript程序常常被制作成程序库的形式,称为网页菜单引擎。这些引擎都提供调用的接口,使得我们能够定制(customize)我们自己的菜单,但问题是定制菜单需要修改这些程序,比较麻烦也容易出错。
我们要解决的就是用XSLT根据菜单的XML,自动生成调用接口。
先让我们看看有哪些现成可用的网页菜单引擎。
三、 网页菜单引擎
因特网上有很多JavaScript资源网站,dynamicdrive.com 就是其中很优秀的一个。那里有许多很好的JavaScript程序可供下载使用,尤其是它的"Menus and Navigation Systems"分类中收集了不少网页菜单引擎。经过比较,我们选择使用"HV menu" (http://www.dynamicdrive.com/dynamicindex1/hvmenu/index.htm)。 HV menu 的优点是既可以做水平排列的菜单,又可以做垂直排列的菜单;可以包含多层子菜单结构;可以自定义菜单的字体、颜色、对齐方式;以及支持IE4+, NS4, NS6+等多种浏览器。
"HV menu"的程序库为 menu_com.js 文件。它的接口规范是:
MenuX=new Array(Text to show, Link, background image (optional), number of sub elements, height, width);
因此在网页中使用这个菜单引擎的 JavaScript 函数调用为:
<script>
Menu1=new Array('论坛首页','http://www.delphibbs.com', '', 4, 20, 120);
Menu2=new Array('论坛分类','', '', 8, 20, 120);
Menu3=new Array('我的论坛','', '', 5, 20, 120);
Menu4=new Array('富翁用户','', '', 3, 20, 120);