xslt空格:利用XSLT生成网页菜单来源: 发布时间:星期四, 2009年2月12日 浏览:130次 评论:0
XSLT 转换生成菜单XML (menu.xsl) XSLT (menu.xsl) 为: <?xml version=\"1.0\" encoding=\"gb2312\" ?> <xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\"> <xsl:template match=\"/\"> <HTML> <HEAD> <TITLE>Menu Test</TITLE> </HEAD> <BODY leftmargin=\"0\" topmargin=\"0\"> <xsl:apply-templates select=\"menus\"/> </BODY> </HTML> </xsl:template> <xsl:template match=\"menus\"> <script> var NoOffFirstLineMenus=<xsl:value-of select=\"count(child::*)\"/>; var StartTop=<xsl:value-of select=\"@top\"/>; var StartLeft=<xsl:value-of select=\"@left\"/>; var FirstLineHorizontal=<xsl:value-of select=\"@style\"/>; <xsl:apply-templates select=\"menu\"> <xsl:with-param name=\"pr\" select=\"\'\'\"/> </xsl:apply-templates> </script> <script type=\"text/javascript\" src=\"menu_com.js\"/> </xsl:template> <xsl:template match=\"menu\"> <xsl:param name=\"pr\"/> Menu<xsl:value-of select=\"\"/><xsl:value-of select=\"position\"/>= Array(\'<xsl:value-of select=\"@caption\"/>\',\'<xsl:value-of select=\"@url\"/>\', \'\', <xsl:value-of select=\"count(child::*)\"/>, 20, 120); <xsl: test=\"count(child::*) > 0\"> <xsl:apply-templates select=\"menu\"> <xsl:with-param name=\"pr\" select=\"concat(,position, \'_\')\"/> </xsl:apply-templates> </xsl:> </xsl:template> </xsl:stylesheet> 这里XSLT共有 3个模板 第个模板 <xsl:template match=\"/\"> 它生成简单HTML框架和个空白网页除了第 2个模板来插入菜单外没有其他功能实际应用中可以扩充这个模板加入网页内容 第 2个模板 <xsl:template match=\"menus\"> 读取存储为 menus 属性top, left和style控制网页菜单位置和类型(style=0为垂直菜单style=1为水平菜单), 并且第 3个模板绘制菜单项 第 3个模板 <xsl:template match=\"menu\"> 生成了各个菜单项它能递归处理嵌套子菜单项情况这里使用了 3个 XSLT [4]:position 用于监测菜单顺序号count(child::*) 用于判别是否具有子菜单concat(,position, \'_\') 最终生成了HV menu所需要菜单变量名 5、 例子 我们用段 javascript (test _menu.htm) 实现XSLT转换以及显示转换后效果 <script> load_xml(\"menu.xml\", \"menu.xsl\"); function load_xml(xmlf, xslf) { try { var myxml = ActiveXObject(\"MSXML2.FreeThreadedDOMDocument\"); myxml.async = false; myxml.load(xmlf); //alert(myxml.xml); var myxsl = ActiveXObject(\"MSXML2.FreeThreadedDOMDocument\");[Page] myxsl.async = false; myxsl.load(xslf); html = myxml.transformNode(myxsl); document.write(html); } catch (exception) { alert(exception.description); } } </script> 这段在 IE 浏览器中创建MSXML[5]对象然后输出结果 HTML读者可以尝试下载本文范例[8],实际体验网页菜单效果 鉴于Netscape浏览器不支持创建MSXML对象我们可以在IIS服务器端转换后返回 HTML[6]本文介绍网页菜单就能在Netscape浏览器中显示和运行 6、 结论 用XML来表达菜单结构非常方便并且易于理解当通过本文介绍XSLT把菜单XML转换为网页菜单引擎接口后为网页制作菜单就十分容易了只需要用普通文本编辑器编辑XML文件本文使用了 HV Menu引擎如果使用其他引擎还可以编制个类似XSLT来配合引擎接口最后XML和XSLT是平台无关标准我们还可以在apache服务器[7]中和JSP服务器[8]中使用本文思路方法 【学习心得体会】 本文是学习XML及XSL技术个很好例子不过使用XML和XSL制作网页菜单仅仅是它们个很小应用方面XML和XSL使用还有更多更加广泛应用值得我们去学习和探讨 0
相关文章读者评论发表评论 |
|