XML教學 | XML 和 XSLT
XSLT
是什麼?
在電腦科學中,可延伸樣式表轉換語言(英語:Extensible Stylesheet Language Transformations
,縮寫XSLT
)是一種樣式轉換標記語言,
可以將XML
資料檔轉換為另外的XML
或其它格式,如HTML
網頁,純文字。
XSLT
最末的T字母表示英語中的「轉換」(transformation
)。它是XSL
規範中的一部分,目前最新的建議版本為XSL 3.0
。
XSLT 3.0
:於2017
年6
月8
日成為W3C
推薦書。主要新功能有:- 流轉換:在以前版本中,整個輸入資料檔必須在處理之前被讀入記憶體,在處理完成之前無法寫到輸出(儘管
Saxon
有流擴展)。
這個工作草案允許XML
流,這對於處理記憶體容納不下的過大資料檔,或者在XML
管道中連串變換時,是有用處的。 - 改進大型樣式表的模組化。
- 改進動態錯誤的處理,例如
xsl:try
指令。 - 函式可以作為其他(高階)函式的參數。
- 流轉換:在以前版本中,整個輸入資料檔必須在處理之前被讀入記憶體,在處理完成之前無法寫到輸出(儘管
與
XQuery
比較:XSLT
主要被認為是一種樣式語言,主要目標是在網路(當作網頁模板)、在螢幕或紙張,呈現給人類讀者觀看的XML
。
而XQuery
則類比為傳統中的資料庫查詢語言。因為這兩種語言起源於不同的社群,XSLT
偏重於處理彈性的敘述式資料應用上,而XQuery
則偏重在資料處理方面,例如執行關係聯結的操作。註:後面才會做
XQuery
的介紹,這邊只是先拿出來做一個比較與知道。
設計模型與處理
XSLT
處理器會取用一或多個XML
源資料檔,加上一或多個XSLT
樣式表,並處理它們以產生輸出檔案。
與廣泛實作的指令式程式語言(例如C
程式語言)相反,XSLT
是宣告式的。
基本處理的範式是模式配比。模板規則只定義如何處理特定XPath
模式相符的節點,而不是列出在具有狀態的環境中執行的一系列動作;
處理器在遇到某一模式符合時,那麼模板規則的內容就包含了,以函數式語句評估的直接成果:即結果樹,它是處理器輸出的基礎。
處理器遵循固定的演算法。首先,假設樣式表已經讀取和準備好了,處理器從輸入的XML
資料檔建立來原始碼樹。
然後處理來源樹的根節點,在樣式表中找到該節點相符的最佳模板,並評估模板的內容。
每一個模板中的指令通常要求處理器在結果樹中產生節點,或者與根節點相同的方式,處理來源樹中的其它節點。從結果樹中取得輸出。
XSL
轉換處理程式示意圖:
簡單的範例
輸入的
XML
文件內容:1
2
3
4
5
6
7
8
9
10
11
<persons>
<person username="JS1">
<name>John</name>
<family-name>Smith</family-name>
</person>
<person username="MI1">
<name>Morka</name>
<family-name>Ismincius</family-name>
</person>
</persons>範例一:從
XSL
轉換為XML
XSLT
樣式表提供了轉換XML
文件的模板:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/persons">
<root>
<xsl:apply-templates select="person"/>
</root>
</xsl:template>
<xsl:template match="person">
<name username="{@username}">
<xsl:value-of select="name" />
</name>
</xsl:template>
</xsl:stylesheet>- 它的評估結果是一個新的
XML
文件,有另一種結構:1
2
3
4
5
<root>
<name username="JS1">John</name>
<name username="MI1">Morka</name>
</root>
範例二:從
XML
轉換為XHTML
- XSLT樣式表:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="/persons">
<html>
<head> <title>Testing XML Example</title> </head>
<body>
<h1>Persons</h1>
<ul>
<xsl:apply-templates select="person">
<xsl:sort select="family-name" />
</xsl:apply-templates>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="person">
<li>
<xsl:value-of select="family-name"/><xsl:text>, </xsl:text><xsl:value-of select="name"/>
</li>
</xsl:template>
</xsl:stylesheet> - 將
XML
輸入檔案轉換則產生如下XHTML
1
2
3
4
5
6
7
8
9
10
11
<html xmlns="http://www.w3.org/1999/xhtml">
<head> <title>Testing XML Example</title> </head>
<body>
<h1>Persons</h1>
<ul>
<li>Ismincius, Morka</li>
<li>Smith, John</li>
</ul>
</body>
</html>
- XSLT樣式表:
範例二的執行效果:
另外提供 w3schools - Try xml change html的線上範例。
結語
此章節「簡單」介紹了XSLT
,使用簡單範例其訪問與操作。
這邊真的只是因為與XML
相關,所以介紹了XSLT
,後面會在另外開XSLT
的教學。
註:以上參考了
w3resource.com - XML and XSLT
維基百科-XML
維基百科-XSLT
Family with 220 icons by inipagi