一、XSL:擴展樣式語言,主要包含:XSLT(用于轉化XML的語言),XPath(在XML歷練導航的語言),XSL-FO(將XML文檔格式化的語言)二、語言發展起因:XML語言是用來表示數據的自解釋性語言,它的標簽是隨意定義的,不像HTML那樣,標簽具有特定的含義,因此,是無法在瀏覽器里面顯示XML的,如果需要,則必須使用另外一種語言將XML轉化成類似HTML語言的形式,這樣就誕生了XSLT,也就是XSL Transform語言,它定義了怎么去顯示一個XML文件。三、語言語法簡介:1.<xsl:template>元素用于構建模版,match 屬性用于關聯 XML 元素和模板。match 屬性也可用來為整個文檔定義模板。match 屬性的值是 XPath 表達式(舉例,match="/" 定義整個文檔)。
當XSLT處理器使用XSL式樣表轉換XML文檔時,處理器將遍歷XML文檔的樹狀結構,一次瀏覽每個節點,并將瀏覽的節點與式樣表中的每個模板規則的模式進行比較。如果處理器找到了與模板規則的模式相匹配的節點,處理器就會輸出此規則的模板。模板通常包含了一些元素指令、新的數據,或者從源XML文檔中復制的數據。詳細解釋可見:http://lavasoft.blog.51cto.com/62575/60408
2.<xsl:apply-template>
首先展示一個例子:
<xsl:template match = "chapter/title">
<h1>
<xsl:apply-templates/>
</h1>
</xsl:template>
<xsl:apply-template>是說對匹配的Node或者Element應用XSLT的內置模版(內置模板就是當XSLT轉換器找不到用戶為元素定義的模板時,所使用的缺省模板。)
詳細解釋可見:http://blog.sina.com.cn/s/blog_5920510a0100p0rd.html
四、JavaScript解決方案
我們是通過以下途徑完成這個工作的:向 XML 文件添加 XSL 樣式表,并通過瀏覽器完成轉換。
即使這種方法的效果很好,在 XML 文件中包含樣式表引用也不總是令人滿意的(例如,在無法識別XSLT的瀏覽器這種方法就無法奏效)。
更通用的方法是使用 JavaScript 來完成轉換。
通過使用 JavaScript,我們可以:
- 進行瀏覽器確認測試
- 根據瀏覽器和使用者的需求來使用不同的樣式表
以下是代碼范例:(來自:http://www.w3school.com.cn/xsl/xsl_client.asp)
<html>
<body>
<script type="text/javascript">
// Load XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("cdcatalog.xml")
// Load XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("cdcatalog.xsl")
// Transform
document.write(xml.transformNode(xsl))
</script>
</body>
</html>
五、何時轉換?
1.既可以在服務器端轉化成可以顯示的文件:
JavaScript 解決方案無法工作于沒有 XML 解析器的瀏覽器。為了讓 XML 數據適用于任何類型的瀏覽器,我們必須在服務器上對 XML 文檔進行轉換,然后將其作為 XHMTL 發送到瀏覽器。
這是 XSLT 的另一個優點。XSLT 的設計目標之一是使數據在服務器上從一種格式轉換到另一種格式成為可能,并向所有類型的瀏覽器返回可讀的數據。
范例:
<%
'Load XML
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.load(Server.MapPath("cdcatalog.xml"))
'Load XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("cdcatalog.xsl"))
'Transform file
Response.Write(xml.transformNode(xsl))
%>
2.也可以在客戶端轉化成可以顯示的文件