4. XSLT


XSLT基本簡介

XSLT是Extensible Stylesheet Language Transformation的縮寫,就字面上的意思是【擴展樣式表的轉換語言】,而XSLT是伴隨著XML檔案蘊育而生的。XSLT是一種用來轉換XML文檔結構的語言,XSLT可以將XML文檔轉換為XHTML、HTML、PDF、TEXT、一段聲音、一串文字、一個SQL語句、一個HTTP訊息等等。XSLT是一種用來轉換XML文檔結構的語言

XSL是由三個部分所組合而成的:(1)XSLT、(2)XPath、(3)XSL-FO
XSLT中的T代表英語中的轉換(transformation)
XSL-FO中的FO代表英語中的格式化對象(formatting objects)
XSLT程序本身只是包含了一些轉換規則的檔案,而這些規則的檔案可以被應用到轉換過程中。處理程序會首先確定使用XSLT中的哪些規則,接著根據優先順序作出因應的轉換操作。

與XPATH的關係

XPath是什麼?
其實就是尋找XML的路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言,由於XML的樹狀結構,XPath的存在提供了資料結構樹中找尋節點的能力。

在XML轉換為其他文檔時,會將來源檔案(source tree)的所有數據或部分數據,利用XPath進行選擇,然後在進入XSLT程序,最後輸出結果文檔(result tree)。

XSLT基本元素

元素

描述

apply-imports

應用來自導入樣式表中的模版規則

apply-templates

向當前元素或當前元素的子元素應用範本

attribute

向元素添加屬性

attribute-set

創建命名的屬性集

call-template

調用一個指定的範本

choose

與以及協同使用,來表達多重條件測試

comment

在結果樹中創建注釋節點

copy

創建當前節點的一個備份(無子節點及屬性)

copy-of

創建當前節點的一個備份(帶有子節點及屬性)

decimal-format

定義當通過format-number()函數把數位轉換為字串時,所要使用的字元和符號

element

在輸出文檔中創建一個元素節點

fallback

假如處理器不支援某個XSLT元素,規定一段備用代碼來運行

for-each

遍曆指定的節點集中的每個節點

if

包含一個範本,僅當某個指定的條件成立時應用此範本

import

用於把一個樣式表中的內容倒入另一個樣式表中

include

把一個樣式表中的內容包含到另一個樣式表中

key

聲明一個命名的鍵

message

向輸出寫一條消息(用於錯誤報告)

namespace-alias

把樣式表中的命名空間替換為輸出中不同的命名空間

number

測定當前節點的整數位置,並對數位進行格式化

otherwise

規定元素的默認動作

output

定義輸出文檔的格式

param

聲明一個局部或全局參數

preserve-space

用於定義保留空白的元素

processing-instruction

生成處理指令節點

sort

對結果進行排序

strip-space

定義應當刪除空白字元的元素

stylesheet

定義樣式表的根元素

template

當指定的節點被匹配時所應用的規則

text

通過樣式表生成文本節點

transform

定義樣式表的根元素

value-of

提取選定節點的值

variable

聲明局部或者全局的變數

when

規定元素的動作

with-param

規定需被傳入某個範本的參數的值


歷史發展

和其他XML家族成員一樣,皆是由W3C擬定和制定的。
它的主要發展歷程如下:
1995年由James Clark提議;
1997年8月正式提案為XSL;
1998年5月由Norman Walsh完成需求概要;
1998年8月18日XSL草案發佈;
1999年11月16日正式發佈XSL1.0推薦版本。
 
與CSS的比較

CSS同樣可以格式化XML文檔,那麼有了CSS為什麼還需要XSLT?
CSS雖然能夠很好的控制輸出的樣式,但是它有嚴重的局限性:
(1)CSS不能重新排序文檔中的元素
(2)CSS不能判斷和控制哪個元素被顯示,哪個不被顯示
(3)CSS不能統計計算元素中的資料
換句話說,CSS適合用於輸出較固定的最終文檔。而XSLT適合用於輸出較不固定常修改的文檔。CSS的優點是簡潔,消耗系統資源少;而XSLT雖然功能強大,但因為要重新索引XML結構樹,所以較消耗記憶體。若能在兩者中截長補短,必能發揮其最大效益,在伺服器端用XSLT處理文檔,在用戶端用CSS來控制顯示,這樣就可以減少回應時間。
 
CSS
XSLT
適用在HTML
可以
不行
適用在XHTML
可以
可以
適用在XML
可以
可以
使用的語法
CSS式樣語法
XML語法
是否是轉換語言
不是
 
優點與缺點

優點
1.可自動轉換成多種的輸出格式
2.可隨時在XML資料內抓取資料,不受XML資料結構影響
3.將數據與表達形式分離
4.XSLT在客戶端進行可以大大減少伺服器的壓力,伺服器只需要將XML數據發送到客戶端,減小網路流量
5.安全性高,若查看XSLT轉換後的原始碼頁面,只會看到XML資料
6.XSLT可以一對多,創造多種版面,而html只能一對一,通過script來創造
7.處理XML比DOM方便,對於目前盛行的Ajax應用來說,尤其便利,可以參考AjaxSLT
AjaxSLT是針對Ajax在取得XML資料格式後,利用JavaScript動態加入XSL-TXPath的運用所開發的一套元件。一般而言,XMLHttpRequest在傳回XML字串後,我們必須花另一個功夫將這些XML資料轉換成能夠顯示給用戶的介面,這是非常繁瑣的工作,而且程式碼是一個麻煩。但使用AjaxSLT後,可以利用XSLT模版對 XML檔進行處理,然後就可以輸出一個用戶介面了,方便許多。
缺點
開發的效率低代碼複雜相容性問題(部分瀏覽器不支援XSLT,不過解決方法是可以將解析放在伺服器端執行,再回傳給客戶端即可)、語法學習需要時間(大部分的工程師可能沒學過,但是語法非常直觀,只要稍微投入心血,就可以輕鬆學會)
 
 2009/12/14

 

  • XSL: Extensible Stylesheet Language Transformations (XSLT)
  • Template Match
  • Operations: Condition, Iteration, Copy, Sort

 

XSLT= Extensible Stylesheet Language Transformations

 

XSLT是把XML檔案轉化為另一檔案的轉換語言,即將源檔案的所有數據或者部分數據,利用XPath進行選擇,生成另外的XML檔案或者其他可直接顯示或打印的文件格式。XSLT語言是聲明性的語言,即XSLT程序本身只是包含了一些轉換規則的檔案。而這些規則可以被遞歸地應用到轉換過程中。XSLT處理程序會首先確定使用XSLT中的哪些規則,然後根據優先級作出相應的轉換操作。 

XSLT是一種 Script Language, 功能上主要分為兩個部份:

  • 轉換XML文件 : 將XML文件架構轉換成另一XML架構的文件或HTML文件.(XSLT)
  • 格式化XML文化 : 格式化Element內容的Style, 以便顯示出XML文件.(XSL)

簡單說, XML配合XSLT就可以在支援HTML的瀏覽器上顯示文件的內容.

◎ XSLT 可用於 XML 轉換成其他格式的 XML, HTML 或其他格式檔,所以,將它視為 

  • 檔案格式轉換程式
  • 或,一種 Template Engine

◎ 和 DOM Tree 的處理一樣,藉由 XPath 的方式來「指定」XML 文件內的特定 element,然後進行各 element 內容的萃取以及處理,一些可以縮寫的 XPath 語法 

 

 

 

XSL=Extensible Stylesheet Language

XSLT由W3C所定義的。   

XSLT是將執行的結果用樹狀的結構來呈現出來。

利用XSLT我們可以把輸入的XML文件(可能是元素或屬性)插到模板當中再產生結果樹。

xsl:apply-templates 將模板套用在節點上的指令 

xsl:output 指定輸出文件的格式

xsl:template 指定一個模板

模板(template)是樣板中最重要的部分,每個元素都有吻合屬性,用來指定輸入文件的那個部分需套用的模板。

一個xsl:template元素為字元字串及指令的組合。

命名空間前置字xsl可以把字元字串與指令區別開。

而當某個模板被套用時,它的字元字串就會被複製到輸出的文件當中,進而指令就會被執行了。

字元字串可以是任意的字母所組合出來的,但先決條件是要被XML所允許。

xsl:apply-templates 元素是將模板套用在節點上的指令,它可以讓XSLT先選擇符號節點的模板,再把這模板套用在那些節點上。但如果超過一個節點被選到,則XSLT就會把模板套用到所有的節點上。