自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

打造基于 XSL 的模板框架

開(kāi)發(fā)
XSL是指可擴(kuò)展樣式表語(yǔ)言 (EXtensible Stylesheet Language),是一種用于以可讀格式呈現(xiàn) XML 數(shù)據(jù)的語(yǔ)言。本文介紹的是打造基于 XSL 的模板框架,希望對(duì)你有幫助。

xsl是一種標(biāo)記語(yǔ)言,表示如何將xml文檔的內(nèi)容裝換成另一種形式的文檔。通過(guò)為xml寫(xiě)xsl來(lái)使得xml顯示成不同的格式。 XSL 之于 XML ,就像 CSS 之于 HTML。它是指可擴(kuò)展樣式表語(yǔ)言 (EXtensible Stylesheet Language)。這是一種用于以可讀格式呈現(xiàn) XML 數(shù)據(jù)的語(yǔ)言。   

上圖是本博客的頁(yè)面布局圖,也是最為普通常見(jiàn)的網(wǎng)頁(yè)布局,具有代表性,這里就是用 XSL 打造這種布局的模板框架。

上圖的特點(diǎn)是 Header、Righter、Footer 三個(gè)區(qū)域是公共區(qū)域,幾乎所有頁(yè)面都包含這三個(gè)區(qū)域。不同頁(yè)面只在 Main 區(qū)域有差異。那么在制作頁(yè)面時(shí)只要編寫(xiě) Main 區(qū)域,其他區(qū)域只要包含三個(gè)公共區(qū)域就算完成頁(yè)面了。這是正向思維,因?yàn)槌绦蚶锩娼?jīng)常這么干,需要的時(shí)候就加載。正向思維只能解決小區(qū)域、臨時(shí)性的加載或調(diào)用,無(wú)法形成框架。

框架的作用是使頁(yè)面繼承框架,又能重寫(xiě)擴(kuò)展。既節(jié)省時(shí)間重用模塊,又能體現(xiàn)靈活性。快樂(lè)笛子的博客-專注于XML技術(shù)與前端開(kāi)發(fā)剛好與上面的分析相反,這里要用到反向思維。編寫(xiě)的頁(yè)面是框架的一個(gè)區(qū)域,當(dāng)前頁(yè)面是被主框架調(diào)用,而不是主動(dòng)調(diào)用其他區(qū)域。按照左圖所示,先編寫(xiě)框架,包含 Header、Righter、Footer,Main區(qū)域的位置留空,調(diào)用一個(gè)固定名稱的 Template,如 Main(類似于C語(yǔ)言的 main 函數(shù))。

主框架文件名為:mainframe.xsl,主要代碼如下:

  1. <html> 
  2. <head> 
  3. <title>主框架</title> 
  4. </head> 
  5. <body> 
  6. <div class="box"> 
  7. <div class="header">Header</div> 
  8. <div class="middle"> 
  9. <div class="main"> 
  10. <xsl:call-template name="main" /> 
  11. </div> 
  12. <div class="righter">Righter</div> 
  13. </div> 
  14. <div class="footer">Footer</div> 
  15. </div> 
  16. </body> 
  17. </html> 

再進(jìn)一步抽象,把 Header、Righter、Footer 以及 title 元素(下面需要用到)保存到另一個(gè)公共文件中去:common.xsl: 

  1. <XSL:TEMPLATE name="header">   
  2. Header   
  3. </XSL:TEMPLATE>   
  4. <XSL:TEMPLATE name="righter">   
  5. Righter   
  6. </XSL:TEMPLATE>   
  7. <XSL:TEMPLATE name="footer">   
  8. Footer   
  9. </XSL:TEMPLATE>   
  10. <XSL:TEMPLATE name="pagetitle">   
  11. 主框架的標(biāo)題   
  12. </XSL:TEMPLATE>   

mainframe.xsl 修改為: 

  1. <xsl:import href="common.xsl" /> 
  2. ...  
  3. <html> 
  4. <head> 
  5. <title><xsl:call-template name="pagetitle" /></title> 
  6. </head> 
  7. <body> 
  8. <div class="box"> 
  9. <div class="header"> 
  10. <xsl:call-template name="header" /> 
  11. </div> 
  12. <div class="middle"> 
  13. <div class="main"> 
  14. <xsl:call-template name="main" /> 
  15. </div> 
  16. <div class="righter"> 
  17. <xsl:call-template name="righter" /> 
  18. </div> 
  19. </div> 
  20. <div class="footer"><xsl:call-template name="footer" /></div> 
  21. </div> 

mainframe.xsl 只承擔(dān)了整體排版,定義全局CSS、Javascript 的功能,與任何子區(qū)域都無(wú)關(guān)。其中 Main 區(qū)域調(diào)用了一個(gè)名為 main 的模板。在 mainframe.xsl 與 common.xsl 文檔中都沒(méi)有定義 main 模板,該模板存在于每個(gè)頁(yè)面中,比如列表頁(yè)的XSL主要代碼如下(文件名為list.xsl):

  1. <XSL:STYLESHEET xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">   
  2. <XSL:IMPORT href="mainframe.xsl" />   
  3. <XSL:OUTPUT doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" encoding="utf-8" method="html" />   
  4. <XSL:TEMPLATE name="main">   
  5. 此處是 Main 區(qū)域,列表頁(yè)   
  6. </XSL:TEMPLATE>   
  7. </XSL:STYLESHEET>  

上面有兩處地方需要注意,***是必須在 xsl:output 元素之前載入主框架(主框架又載入 common.xsl),其次是此頁(yè)面默認(rèn)入口是名為 main 的 template,即不能存在自動(dòng)匹配的模板( match="/" 從根開(kāi)始匹配的模板)。list.xsl 中的 main 模板是為主框架準(zhǔn)備的。同樣,詳細(xì)頁(yè)也如此編寫(xiě),這樣就實(shí)現(xiàn)了框架繼承與區(qū)域重用。

頁(yè)面的標(biāo)題(title元素)是在mainframe中定義的,但每個(gè)詳細(xì)頁(yè)的標(biāo)題都不同,列表頁(yè)也不同,這就需要重寫(xiě)title模板覆蓋mainframe中的默認(rèn)值。
list.xsl 文件如下:

  1. <XSL:STYLESHEET xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">   
  2. <XSL:IMPORT href="mainframe.xsl" />   
  3. <XSL:OUTPUT doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" encoding="utf-8" method="html" />   
  4. <XSL:TEMPLATE name="main">   
  5. 此處是 Main 區(qū)域,列表頁(yè)   
  6. </XSL:TEMPLATE>   
  7. <XSL:TEMPLATE name="pagetitle">   
  8. 列表頁(yè)的標(biāo)題   
  9. </XSL:TEMPLATE>   
  10. </XSL:STYLESHEET>  

上面的 pagetitle 模板將會(huì)覆蓋 common.xsl 中的同名模板。列表頁(yè)的標(biāo)題與其他未定義 pagetitle 的頁(yè)面的標(biāo)題將不再一致。
注意,必須是使用 xsl:import 元素導(dǎo)進(jìn)來(lái)的模板才可以被覆蓋,如果使用 xsl:include ,將產(chǎn)生錯(cuò)誤:"不能使用相同導(dǎo)入優(yōu)先權(quán)多次定義命名模板"。

【編輯推薦】

  1. 詳談XML的應(yīng)用分類及前景
  2. 給XML初學(xué)者
  3. VB.NET實(shí)現(xiàn)圖象文件和XML文件互換
  4. SQL Server 2000中生成XML的小技巧
責(zé)任編輯:于鐵 來(lái)源: 笛子的博客
相關(guān)推薦

2009-02-13 10:04:02

AntXSLXML

2025-02-05 09:51:24

2021-05-12 08:54:56

FastAP web 框架數(shù)據(jù)庫(kù)操作

2016-12-05 09:50:17

2009-12-09 09:57:05

ibmdwJavaPHP

2022-09-07 21:31:19

微前端架構(gòu)iframe

2023-11-03 08:04:47

Web微前端框架

2021-02-18 09:54:37

數(shù)據(jù)湖框架數(shù)據(jù)

2025-01-17 17:00:57

UxFrameUI框架

2009-06-19 09:52:46

Acegi安全框架Spring框架

2013-11-22 11:03:45

GoogleWeb開(kāi)發(fā)工具

2022-07-07 10:41:53

鯤鵬

2015-11-03 16:43:01

容器編排容器環(huán)境可擴(kuò)展

2013-07-25 15:39:12

積分墻盈利模式移動(dòng)應(yīng)用

2013-01-14 15:08:46

SAPHANABusiness Su

2015-09-06 08:57:07

BootstrapCSS框架

2022-06-09 07:27:14

JavaSpring容器

2009-11-12 16:17:13

.NET

2013-07-27 19:52:50

2017-07-06 15:02:53

OpenGL ES架構(gòu)GPU
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)