一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

用XSLT生成網(wǎng)頁菜單(1)_1

 高山流水 2005-09-19
用XSLT生成網(wǎng)頁菜單(1)
 日期:2005-2-17 16:18:33   來源:網(wǎng)上轉(zhuǎn)貼   編輯:本站轉(zhuǎn)  作者:未知  發(fā)送給好友




四、 XSLT
  轉(zhuǎn)換菜單的XML (menu.xsl) 的XSLT (menu.xsl) 為:
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet xmlns:xsl="http://www./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()"/>=new Array(‘<xsl:value-of select="@caption"/>‘,‘<xsl:value-of select="@url"/>‘, ‘‘, <xsl:value-of select="count(child::*)"/>, 20, 120);
<xsl:if test="count(child::*) > 0">
<xsl:apply-templates select="menu">
<xsl:with-param name="pr" select="concat(,position(), ‘_‘)"/>
</xsl:apply-templates>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

這里XSLT一共有三個模板。
第一個模板 <xsl:template match="/"> 它生成簡單的HTML框架和一個空白的網(wǎng)頁,除了調(diào)用第二個模板來插入菜單外,沒有其他功能。實際應(yīng)用中可以擴充這個模板加入網(wǎng)頁的內(nèi)容。
第二個模板 <xsl:template match="menus"> 讀取存儲為 menus 屬性的top, left和style控制網(wǎng)頁菜單的位置和類型(style=0為垂直菜單,style=1為水平菜單), 并且調(diào)用第三個模板繪制菜單項。
第三個模板 <xsl:template match="menu"> 生成了各個菜單項,它能遞歸處理嵌套子菜單項的情況。這里使用了三個 XSLT 函數(shù)[4]:position() 用于監(jiān)測菜單的順序號,count(child::*) 用于判別是否具有子菜單,concat(,position(), ‘_‘) 最終生成了HV menu所需要的菜單變量名。

  五、 實例
  我們用一段 javascript (test _menu.htm) 實現(xiàn)XSLT轉(zhuǎn)換,以及顯示轉(zhuǎn)換后的效果。
<script>
load_xml("menu.xml", "menu.xsl");
function load_xml(xmlf, xslf) {
try {
var myxml = new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
myxml.async = false;
myxml.load(xmlf);
//alert(myxml.xml);
var myxsl = new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
myxsl.async = false;
myxsl.load(xslf);
html = myxml.transformNode(myxsl);
document.write(html);
}
catch (exception) {
alert(exception.description);
}
}
</script>[page]

這段程序在 IE 瀏覽器中創(chuàng)建MSXML[5]對象,然后輸出結(jié)果 HTML。讀者可以嘗試下載本文的范例程序[8],實際體驗網(wǎng)頁菜單的效果。
 

鑒于Netscape瀏覽器不支持創(chuàng)建MSXML對象,我們可以在IIS服務(wù)器端轉(zhuǎn)換后的返回 HTML[6]。本文介紹的網(wǎng)頁菜單就能在Netscape瀏覽器中顯示和運行。

  六、 結(jié)論
用XML來表達菜單結(jié)構(gòu)非常方便并且易于理解,當(dāng)通過本文介紹的XSLT把菜單XML轉(zhuǎn)換為網(wǎng)頁菜單引擎的調(diào)用接口后,為網(wǎng)頁制作菜單就十分容易了,只需要用普通的文本編輯器編輯XML文件。本文使用了 HV Menu引擎,如果使用其他的引擎,還可以編制一個類似XSLT來配合調(diào)用引擎的接口。最后,XML和XSLT是平臺無關(guān)的標(biāo)準(zhǔn),我們還可以在apache服務(wù)器[7]中和JSP服務(wù)器[8]中使用本文的方法。
  【學(xué)習(xí)心得】
本文是學(xué)習(xí)XML及XSL技術(shù)的一個很好的實例。不過使用XML和XSL制作網(wǎng)頁菜單僅僅是它們的一個很小的應(yīng)用方面,XML和XSL的使用還有更多更加廣泛的應(yīng)用值得我們?nèi)W(xué)習(xí)和探討。
本文中所制作的菜單效果雖然已經(jīng)很出色,但是還是具有一定的缺點。例如菜單的位置控制、樣式的擴充性,當(dāng)子菜單過長時(超過瀏覽器縱向顯示的長度)無法正確顯示不可見的子菜單項等等。不過本文所使用的JS腳本給我們留出了很多擴展功能的接口函數(shù)。在長達25KB、600行的JS文件中,我們可以對菜單效果做進一步的改動。
另外,微軟的網(wǎng)站以及MSDN的網(wǎng)站的導(dǎo)航條也運用了XML和XSL技術(shù),我寫的《仿XP風(fēng)格的導(dǎo)航條制作教程》一文當(dāng)中就是基于微軟網(wǎng)站的導(dǎo)航條而寫的,感興趣的朋友可以參考一下。
用XSLT生成網(wǎng)頁菜單(1)
 日期:2005-2-17 16:18:33   來源:網(wǎng)上轉(zhuǎn)貼   編輯:本站轉(zhuǎn)  作者:未知  發(fā)送給好友




四、 XSLT
  轉(zhuǎn)換菜單的XML (menu.xsl) 的XSLT (menu.xsl) 為:














[page]

這段程序在 IE 瀏覽器中創(chuàng)建MSXML[5]對象,然后輸出結(jié)果 HTML。讀者可以嘗試下載本文的范例程序[8],實際體驗網(wǎng)頁菜單的效果。
 

鑒于Netscape瀏覽器不支持創(chuàng)建MSXML對象,我們可以在IIS服務(wù)器端轉(zhuǎn)換后的返回 HTML[6]。本文介紹的網(wǎng)頁菜單就能在Netscape瀏覽器中顯示和運行。

  六、 結(jié)論
用XML來表達菜單結(jié)構(gòu)非常方便并且易于理解,當(dāng)通過本文介紹的XSLT把菜單XML轉(zhuǎn)換為網(wǎng)頁菜單引擎的調(diào)用接口后,為網(wǎng)頁制作菜單就十分容易了,只需要用普通的文本編輯器編輯XML文件。本文使用了 HV Menu引擎,如果使用其他的引擎,還可以編制一個類似XSLT來配合調(diào)用引擎的接口。最后,XML和XSLT是平臺無關(guān)的標(biāo)準(zhǔn),我們還可以在apache服務(wù)器[7]中和JSP服務(wù)器[8]中使用本文的方法。
  【學(xué)習(xí)心得】
本文是學(xué)習(xí)XML及XSL技術(shù)的一個很好的實例。不過使用XML和XSL制作網(wǎng)頁菜單僅僅是它們的一個很小的應(yīng)用方面,XML和XSL的使用還有更多更加廣泛的應(yīng)用值得我們?nèi)W(xué)習(xí)和探討。
本文中所制作的菜單效果雖然已經(jīng)很出色,但是還是具有一定的缺點。例如菜單的位置控制、樣式的擴充性,當(dāng)子菜單過長時(超過瀏覽器縱向顯示的長度)無法正確顯示不可見的子菜單項等等。不過本文所使用的JS腳本給我們留出了很多擴展功能的接口函數(shù)。在長達25KB、600行的JS文件中,我們可以對菜單效果做進一步的改動。
另外,微軟的網(wǎng)站以及MSDN的網(wǎng)站的導(dǎo)航條也運用了XML和XSL技術(shù),我寫的《仿XP風(fēng)格的導(dǎo)航條制作教程》一文當(dāng)中就是基于微軟網(wǎng)站的導(dǎo)航條而寫的,感興趣的朋友可以參考一下。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本男人女人干逼视频| 久久精品亚洲精品一区| 国产水滴盗摄一区二区| 亚洲国产精品肉丝袜久久| 国产麻豆一线二线三线| 亚洲精品成人福利在线| 亚洲av熟女一区二区三区蜜桃| 久久久精品区二区三区| 日本不卡在线视频你懂的| 日韩精品视频一二三区| 99久久国产亚洲综合精品| 欧美一区二区三区在线播放| 欧美中文字幕一区在线 | 国产精品午夜一区二区三区| 日韩一区二区三区久久| 一区二区三区日韩中文| 国产又大又硬又粗又湿| 国产又粗又爽又猛又黄的| 五月婷日韩中文字幕四虎| 91午夜少妇极品福利| 国产精品一区二区三区欧美| 黄片免费播放一区二区| 精品日韩av一区二区三区| 日韩免费国产91在线| 美女极度色诱视频在线观看| 婷婷激情四射在线观看视频| 91福利免费一区二区三区| 国产午夜精品亚洲精品国产| 扒开腿狂躁女人爽出白浆av| 99少妇偷拍视频在线| 91亚洲精品综合久久| 中文日韩精品视频在线| 国产性情片一区二区三区| 久热久热精品视频在线观看| 国产人妻熟女高跟丝袜| 91亚洲精品综合久久| 美日韩一区二区精品系列| 国产一级内片内射免费看| 免费国产成人性生活生活片| 国产韩国日本精品视频| 九九热这里只有免费精品|