
- XSLT 教程
- XSLT - 首頁
- XSLT - 概述
- XSLT - 語法
- XSLT - <template>
- XSLT - <value-of>
- XSLT - <for-each>
- XSLT - <sort>
- XSLT - <if>
- XSLT - <choose>
- XSLT - <key>
- XSLT - <message>
- XSLT - <apply-template>
- XSLT - <import>
- XSLT 有用資源
- XSLT - 快速指南
- XSLT - 有用資源
- XSLT - 討論
XSLT 快速指南
XSLT 概述
XSL
在學習 XSLT 之前,我們應該首先了解 XSL,它代表可擴充套件樣式表語言 (EXtensible Stylesheet Language)。它類似於 XML,就像 CSS 關係到 HTML 一樣。
XSL 的需求
對於 HTML 文件,標籤是預定義的,例如 table、div 和 span;瀏覽器知道如何向它們新增樣式並使用 CSS 樣式顯示它們。但在 XML 文件的情況下,標籤不是預定義的。為了理解和設定 XML 文件的樣式,全球資訊網聯盟 (W3C) 開發了 XSL,它可以用作基於 XML 的樣式表語言。XSL 文件指定瀏覽器應如何呈現 XML 文件。
以下是 XSL 的主要部分:
XSLT - 用於將 XML 文件轉換為各種其他型別的文件。
XPath - 用於導航 XML 文件。
XSL-FO - 用於格式化 XML 文件。
什麼是 XSLT
XSLT(可擴充套件樣式表語言轉換)提供了自動將 XML 資料從一種格式轉換為另一種格式的功能。
XSLT 如何工作
XSLT 樣式表用於定義要應用於目標 XML 文件的轉換規則。XSLT 樣式表以 XML 格式編寫。XSLT 處理器獲取 XSLT 樣式表並將轉換規則應用於目標 XML 文件,然後它生成以 XML、HTML 或文字格式表示的格式化文件。然後,此格式化文件由 XSLT 格式化程式利用以生成要顯示給終端使用者的實際輸出。

優勢
以下是使用 XSLT 的優勢:
獨立於程式設計。轉換寫在單獨的 xsl 檔案中,該檔案又是 XML 文件。
只需修改 xsl 檔案中的轉換即可更改輸出。無需更改任何程式碼。因此,Web 設計師可以編輯樣式表並快速檢視輸出中的更改。
XSLT 語法
假設我們有以下示例 XML 檔案 students.xml,需要將其轉換為格式良好的 HTML 文件。
students.xml
<?xml version = "1.0"?> <class> <student rollno = "393"> <firstname>Dinkar</firstname> <lastname>Kad</lastname> <nickname>Dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>Vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>Jasvir</firstname> <lastname>Singh</lastname> <nickname>Jazz</nickname> <marks>90</marks> </student> </class>
我們需要為上述 XML 文件定義一個 XSLT 樣式表文檔,以滿足以下條件:
頁面應有一個標題學生。
頁面應包含學生詳細資訊的表格。
列應具有以下標題:學號、名、姓、暱稱、分數
表格必須相應地包含學生詳細資訊。
步驟 1:建立 XSLT 文件
建立一個 XSLT 文件以滿足上述要求,將其命名為 students.xsl 並將其儲存在與 students.xml 相同的位置。
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?> <!-- xsl stylesheet declaration with xsl namespace: Namespace tells the xlst processor about which element is to be processed and which is used for output purpose only --> <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <!-- xsl template declaration: template tells the xlst processor about the section of xml document which is to be formatted. It takes an XPath expression. In our case, it is matching document root element and will tell processor to process the entire document with this template. --> <xsl:template match = "/"> <!-- HTML tags Used for formatting purpose. Processor will skip them and browser will simply render them. --> <html> <body> <h2>Students</h2> <table border = "1"> <tr bgcolor = "#9acd32"> <th>Roll No</th> <th>First Name</th> <th>Last Name</th> <th>Nick Name</th> <th>Marks</th> </tr> <!-- for-each processing instruction Looks for each element matching the XPath expression --> <xsl:for-each select="class/student"> <tr> <td> <!-- value-of processing instruction process the value of the element matching the XPath expression --> <xsl:value-of select = "@rollno"/> </td> <td><xsl:value-of select = "firstname"/></td> <td><xsl:value-of select = "lastname"/></td> <td><xsl:value-of select = "nickname"/></td> <td><xsl:value-of select = "marks"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
步驟 2:將 XSLT 文件連結到 XML 文件
使用以下 xml-stylesheet 標記更新 student.xml 文件。將 href 值設定為 students.xsl
<?xml version = "1.0"?> <?xml-stylesheet type = "text/xsl" href = "students.xsl"?> <class> ... </class>
步驟 3:在 Internet Explorer 中檢視 XML 文件
students.xml
<?xml version = "1.0"?> <?xml-stylesheet type = "text/xsl" href = "students.xsl"?> <class> <student rollno = "393"> <firstname>Dinkar</firstname> <lastname>Kad</lastname> <nickname>Dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>Vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>Jasvir</firstname> <lastname>Singh</lastname> <nickname>Jazz</nickname> <marks>90</marks> </student> </class>
輸出

XSLT <template>
<xsl:template> 定義了一種重用模板的方法,以便為特定型別/上下文節點生成所需的輸出。
宣告
以下是<xsl:template>元素的語法宣告。
<xsl:template name = Qname match = Pattern priority = number mode = QName > </xsl:template>
屬性
序號 | 名稱和說明 |
---|---|
1 | name 要應用模板的元素的名稱。 |
2 | match 表示要應用模板的元素的模式。 |
3 | priority 模板的優先順序數字。在高優先順序模板前面,不會考慮優先順序較低的匹配模板。 |
4 | mode 允許多次處理元素以每次產生不同的結果。 |
元素
出現次數 | 無限 |
---|---|
父元素 |
xsl:stylesheet, xsl:transform |
子元素 |
xsl:apply-imports,xsl:apply-templates,xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:number, xsl:param, xsl:processing-instruction, xsl:text, xsl:value-of, xsl:variable, 輸出元素 |
演示示例
此模板規則具有一個模式,該模式識別<student>元素並以表格格式生成輸出。
students.xml
<?xml version = "1.0"?> <?xml-stylesheet type = "text/xsl" href = "students.xsl"?> <class> <student rollno = "393"> <firstname>Dinkar</firstname> <lastname>Kad</lastname> <nickname>Dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>Vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>Jasvir</firstname> <lastname>Singh</lastname> <nickname>Jazz</nickname> <marks>90</marks> </student> </class>
students_imports.xsl
<?xml version = "1.0" encoding = "UTF-8"?> <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:template match = "/"> <html> <body> <h2>Students</h2> <table border = "1"> <tr bgcolor = "#9acd32"> <th>Roll No</th> <th>First Name</th> <th>Last Name</th> <th>Nick Name</th> <th>Marks</th> </tr> <xsl:for-each select = "class/student"> <tr> <td><xsl:value-of select = "@rollno"/></td> <td><xsl:value-of select = "firstname"/></td> <td><xsl:value-of select = "lastname"/></td> <td><xsl:value-of select = "nickname"/></td> <td><xsl:value-of select = "marks"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
輸出

XSLT <value-of>
<xsl:value-of> 標記將根據 XPath 表示式選擇的節點的值作為文字輸出。
宣告
以下是<xsl:value-of>元素的語法宣告。
<xsl:value-of select = Expression disable-output-escaping = "yes" | "no" > </xsl:value-of>
屬性
序號 | 名稱和說明 |
---|---|
1 | Select 在當前上下文中要計算的 XPath 表示式。 |
2 | disable-outputescaping 預設 -“no”。如果是“yes”,輸出文字將不會轉義文字中的 xml 字元。 |
元素
出現次數 | 無限 |
---|---|
父元素 |
xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processing instruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, 輸出元素 |
子元素 |
無 |
演示示例
此示例建立一個<student>元素的表格,其中包含其屬性rollno及其子元素<firstname>、<lastname>、<nickname>和<marks>。
students.xml
<?xml version = "1.0"?> <?xml-stylesheet type = "text/xsl" href = "students.xsl"?> <class> <student rollno = "393"> <firstname>Dinkar</firstname> <lastname>Kad</lastname> <nickname>Dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>Vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>Jasvir</firstname> <lastname>Singh</lastname> <nickname>Jazz</nickname> <marks>90</marks> </student> </class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?> <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:template match = "/"> <html> <body> <h2>Students</h2> <table border = "1"> <tr bgcolor = "#9acd32"> <th>Roll No</th> <th>First Name</th> <th>Last Name</th> <th>Nick Name</th> <th>Marks</th> </tr> <xsl:for-each select = "class/student"> <tr> <td><xsl:value-of select = "@rollno"/></td> <td><xsl:value-of select = "firstname"/></td> <td><xsl:value-of select = "lastname"/></td> <td><xsl:value-of select = "nickname"/></td> <td><xsl:value-of select = "marks"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
驗證輸出

XSLT <for-each>
<xsl:for-each> 標記對每個節點重複應用模板。
宣告
以下是<xsl:for-each>元素的語法宣告
<xsl:for-each select = Expression > </xsl:for-each>
屬性
序號 | 名稱和說明 |
---|---|
1 | Select 在當前上下文中要計算的 XPath 表示式,以確定要迭代的節點集。 |
元素
出現次數 | 無限 |
---|---|
父元素 |
xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:foreach, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processinginstruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, 輸出元素。 |
子元素 |
xsl:apply-imports, xsl:apply-templates, xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:number, xsl:processing-instruction, xsl:sort, xsl:text, xsl:value-of, xsl:variable。 |
演示示例
此示例透過迭代每個學生,建立一個<student>元素的表格,其中包含其屬性rollno及其子元素<firstname>、<lastname>、<nickname>和<marks>。
students.xml
<?xml version = "1.0"?> <?xml-stylesheet type = "text/xsl" href = "students.xsl"?> <class> <student rollno = "393"> <firstname>Dinkar</firstname> <lastname>Kad</lastname> <nickname>Dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>Vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>Jasvir</firstname> <lastname>Singh</lastname> <nickname>Jazz</nickname> <marks>90</marks> </student> </class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?> <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:template match = "/"> <html> <body> <h2>Students</h2> <table border = "1"> <tr bgcolor = "#9acd32"> <th>Roll No</th> <th>First Name</th> <th>Last Name</th> <th>Nick Name</th> <th>Marks</th> </tr> <xsl:for-each select = "class/student"> <tr> <td><xsl:value-of select = "@rollno"/></td> <td><xsl:value-of select = "firstname"/></td> <td><xsl:value-of select = "lastname"/></td> <td><xsl:value-of select = "nickname"/></td> <td><xsl:value-of select = "marks"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
輸出

XSLT <sort>
<xsl:sort> 標記指定節點的排序條件。
宣告
以下是<xsl:sort>元素的語法宣告。
<xsl:sort select = string-expression lang = { nmtoken } data-type = { "text" | "number" | QName } order = { "ascending" | "descending" } case-order = { "upper-first" | "lower-first" } > </xsl:sort>
屬性
序號 | 名稱和說明 |
---|---|
1 | select 節點的排序鍵。 |
2 | lang 用於確定排序順序的語言字母。 |
3 | data-type 文字的資料型別。 |
4 | order 排序順序。預設為“升序”。 |
5 | case-order 按大小寫對字串進行排序。預設為“upper-first”。 |
元素
出現次數 | 無限 |
父元素 | xsl:apply-templates, xsl:for-each |
子元素 | 無 |
演示示例
此示例透過迭代每個學生並按名字對它們進行排序,建立一個<student>元素的表格,其中包含其屬性rollno及其子元素<firstname>、<lastname>、<nickname>和<marks>。
students.xml
<?xml version = "1.0"?> <?xml-stylesheet type = "text/xsl" href = "students.xsl"?> <class> <student rollno = "393"> <firstname>Dinkar</firstname> <lastname>Kad</lastname> <nickname>Dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>Vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>Jasvir</firstname> <lastname>Singh</lastname> <nickname>Jazz</nickname> <marks>90</marks> </student> </class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?> <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:template match = "/"> <html> <body> <h2>Students</h2> <table border = "1"> <tr bgcolor = "#9acd32"> <th>Roll No</th> <th>First Name</th> <th>Last Name</th> <th>Nick Name</th> <th>Marks</th> </tr> <xsl:for-each select = "class/student"> <xsl:sort select = "firstname"/> <tr> <td><xsl:value-of select = "@rollno"/></td> <td><xsl:value-of select = "firstname"/></td> <td><xsl:value-of select = "lastname"/></td> <td><xsl:value-of select = "nickname"/></td> <td><xsl:value-of select = "marks"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
輸出

XSLT <if>
<xsl:if> 標記指定針對節點內容的條件測試。
宣告
以下是<xsl:if>元素的語法宣告。
<xsl:if test = boolean-expression > </xsl:if>
屬性
序號 | 名稱和說明 |
---|---|
1 | test 要測試的 xml 資料中的條件。 |
元素
出現次數 | 無限 |
---|---|
父元素 | xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processing-instruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, 輸出元素 |
子元素 | xsl:apply-templates, xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:for-each, xsl:if, xsl:processing-instruction, xsl:text, xsl:value-of, xsl:variable, 輸出元素 |
演示示例
此示例透過迭代每個學生,建立一個<student>元素的表格,其中包含其屬性rollno及其子元素<firstname>、<lastname>、<nickname>和<marks>。它檢查分數是否大於 90,然後列印學生詳細資訊。
students.xml
<?xml version = "1.0"?> <?xml-stylesheet type = "text/xsl" href = "students.xsl"?> <class> <student rollno = "393"> <firstname>Dinkar</firstname> <lastname>Kad</lastname> <nickname>Dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>Vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>Jasvir</firstname> <lastname>Singh</lastname> <nickname>Jazz</nickname> <marks>90</marks> </student> </class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?> <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:template match = "/"> <html> <body> <h2>Students</h2> <table border = "1"> <tr bgcolor = "#9acd32"> <th>Roll No</th> <th>First Name</th> <th>Last Name</th> <th>Nick Name</th> <th>Marks</th> </tr> <xsl:for-each select = "class/student"> <xsl:if test = "marks > 90"> <tr> <td><xsl:value-of select = "@rollno"/></td> <td><xsl:value-of select = "firstname"/></td> <td><xsl:value-of select = "lastname"/></td> <td><xsl:value-of select = "nickname"/></td> <td><xsl:value-of select = "marks"/></td> </tr> </xsl:if> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
輸出

XSLT <choose>
<xsl:choose> 標記指定針對節點內容的多個條件測試,並結合使用<xsl:otherwise>和<xsl:when>元素。
宣告
以下是<xsl:choose>元素的語法宣告。
<xsl:choose > </xsl:choose>
元素
出現次數 | 無限 |
---|---|
父元素 |
xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processing-instruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, 輸出元素 |
子元素 |
xsl:otherwise, xsl:when |
演示示例
此示例透過迭代每個學生,建立一個<student>元素的表格,其中包含其屬性rollno及其子元素<firstname>、<lastname>、<nickname>和<marks>。它檢查並列印成績詳細資訊。
students.xml
<?xml version = "1.0"?> <?xml-stylesheet type = "text/xsl" href = "students.xsl"?> <class> <student rollno = "393"> <firstname>Dinkar</firstname> <lastname>Kad</lastname> <nickname>Dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>Vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>Jasvir</firstname> <lastname>Singh</lastname> <nickname>Jazz</nickname> <marks>90</marks> </student> </class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?> <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:template match = "/"> <html> <body> <h2>Students</h2> <table border = "1"> <tr bgcolor = "#9acd32"> <th>Roll No</th> <th>First Name</th> <th>Last Name</th> <th>Nick Name</th> <th>Marks</th> <th>Grade</th> </tr> <xsl:for-each select = "class/student"> <tr> <td><xsl:value-of select = "@rollno"/></td> <td><xsl:value-of select = "firstname"/></td> <td><xsl:value-of select = "lastname"/></td> <td><xsl:value-of select = "nickname"/></td> <td><xsl:value-of select = "marks"/></td> <td> <xsl:choose> <xsl:when test = "marks > 90"> High </xsl:when> <xsl:when test = "marks > 85"> Medium </xsl:when> <xsl:otherwise> Low </xsl:otherwise> </xsl:choose> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
輸出

XSLT <key>
<xsl:key> 標記元素指定分配給 XML 文件中特定元素的命名鍵值對。此鍵與 XPath 表示式中的 key() 函式一起使用,以訪問 XML 文件中分配的元素。
宣告
以下是<xsl:key>元素的語法宣告。
<xsl:key name = QName match = Pattern use = Expression > </xsl:key>
屬性
序號 | 名稱和說明 |
---|---|
1 | Name 要使用的鍵的名稱。 |
2 | Match 用於識別持有此鍵的節點的模式。 |
3 | Use XPath 表示式,用於識別 xml 文件節點的值。 |
元素
出現次數 | 無限 |
父元素 | xsl:stylesheet |
子元素 | 無 |
演示示例
此示例透過迭代每個學生,建立一個<student>元素的表格,其中包含其屬性rollno及其子元素<firstname>、<lastname>、<nickname>和<marks>。它檢查鍵是否為 firstname 是否為學生姓名之一,然後列印學生詳細資訊。
students.xml
<?xml version = "1.0"?> <?xml-stylesheet type = "text/xsl" href = "students.xsl"?> <class> <student rollno = "393"> <firstname>Dinkar</firstname> <lastname>Kad</lastname> <nickname>Dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>Vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>Jasvir</firstname> <lastname>Singh</lastname> <nickname>Jazz</nickname> <marks>90</marks> </student> </class>
students.xsl
<xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:key name = "firstname-search" match = "student" use = "firstname"/> <xsl:template match = "/"> <html> <body> <h2>Students</h2> <table border = "1"> <tr bgcolor = "#9acd32"> <th>Roll No</th> <th>First Name</th> <th>Last Name</th> <th>Nick Name</th> <th>Marks</th> </tr> <xsl:for-each select = "key('firstname-search', 'Dinkar')"> <tr> <td><xsl:value-of select = "@rollno"/></td> <td><xsl:value-of select = "firstname"/></td> <td><xsl:value-of select = "lastname"/></td> <td><xsl:value-of select = "nickname"/></td> <td><xsl:value-of select = "marks"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
輸出

XSLT <message>
<message> 標記元素有助於除錯 XSLT 處理。它類似於 javascript 警報。<xsl:> 標記將訊息緩衝到 XSLT 處理器,該處理器將終止處理並將訊息傳送到呼叫應用程式以顯示錯誤訊息。
宣告
以下是<xsl:message>元素的語法宣告。
<xsl:message terminate = "yes" | "no" > </xsl:message>
屬性
序號 | 名稱和說明 |
---|---|
1 | terminate 它指定在執行此指令後是否應終止轉換。預設為“yes”。 |
元素
出現次數 | 無限 |
---|---|
父元素 | xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:foreach, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processinginstruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, 輸出元素 |
子元素 |
xsl:apply-templates, xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:for-each, xsl:if, xsl:processing-instruction, xsl:text, xsl:value-of, xsl:variable, 輸出元素 |
演示示例
此示例透過迭代每個學生,建立一個<student>元素的表格,其中包含其屬性rollno及其子元素<firstname>、<lastname>、<nickname>和<marks>。它檢查鍵是否為 firstname 是否存在,然後列印學生詳細資訊,否則顯示錯誤訊息。
students.xml
<?xml version = "1.0"?> <?xml-stylesheet type = "text/xsl" href = "students.xsl"?> <class> <student rollno = "393"> <firstname>Dinkar</firstname> <lastname>Kad</lastname> <nickname>Dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname></firstname> <lastname>Gupta</lastname> <nickname>Vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>Jasvir</firstname> <lastname>Singh</lastname> <nickname>Jazz</nickname> <marks>90</marks> </student> </class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?> <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:template match = "/"> <html> <body> <h2>Students</h2> <table border = "1"> <tr bgcolor = "#9acd32"> <th>Roll No</th> <th>First Name</th> <th>Last Name</th> <th>Nick Name</th> <th>Marks</th> </tr> <xsl:for-each select = "class/student"> <xsl:if test = "firstname = ''"> <xsl:message terminate = "yes">A first name field is empty. </xsl:message> </xsl:if> <tr> <td><xsl:value-of select = "@rollno"/></td> <td><xsl:value-of select = "firstname"/></td> <td><xsl:value-of select = "lastname"/></td> <td><xsl:value-of select = "nickname"/></td> <td><xsl:value-of select = "marks"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
輸出

XSLT <apply-template>
<xsl:apply-template> 標記指示 XSLT 處理器查詢要應用的適當模板,這取決於每個選定節點的型別和上下文。
宣告
以下是<xsl:apply-template>元素的語法宣告。
<xsl:apply-template select = Expression mode = QName > </xsl:apply-template>
屬性
序號 | 名稱和說明 |
---|---|
1 | select 用於處理由 XPath 表示式選擇的節點,而不是處理所有子節點。 |
2 | mode 允許根據其限定名稱指定的元素被多次處理,每次產生不同的結果。 |
元素
出現次數 | 無限 |
---|---|
父元素 |
xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:foreach, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processinginstruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, 輸出元素 |
子元素 |
xsl:sort, xsl:with-param |
演示示例
此示例透過迭代每個學生,建立一個<student>元素的列表,其中包含其屬性rollno及其子元素<firstname>、<lastname>、<nickname>和<marks>。
students.xml
<?xml version = "1.0"?> <?xml-stylesheet type = "text/xsl" href = "students.xsl"?> <class> <student rollno = "393"> <firstname>Dinkar</firstname> <lastname>Kad</lastname> <nickname>Dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>Vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>Jasvir</firstname> <lastname>Singh</lastname> <nickname>Jazz</nickname> <marks>90</marks> </student> </class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?> <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:template match = "/"> <html> <body> <h2>Students</h2> <xsl:apply-templates select = "class/student" /> </body> </html> </xsl:template> <xsl:template match = "class/student"> <xsl:apply-templates select = "@rollno" /> <xsl:apply-templates select = "firstname" /> <xsl:apply-templates select = "lastname" /> <xsl:apply-templates select = "nickname" /> <xsl:apply-templates select = "marks" /> <br /> </xsl:template> <xsl:template match = "@rollno"> <span style = "font-size = 22px;"> <xsl:value-of select = "." /> </span> <br /> </xsl:template> <xsl:template match = "firstname"> First Name:<span style = "color:blue;"> <xsl:value-of select = "." /> </span> <br /> </xsl:template> <xsl:template match = "lastname"> Last Name:<span style = "color:green;"> <xsl:value-of select = "." /> </span> <br /> </xsl:template> <xsl:template match = "nickname"> Nick Name:<span style = "color:red;"> <xsl:value-of select = "." /> </span> <br /> </xsl:template> <xsl:template match = "marks"> Marks:<span style = "color:gray;"> <xsl:value-of select = "." /> </span> <br /> </xsl:template> </xsl:stylesheet>
輸出

XSLT <import>
<xsl:import> 標記將一個樣式表的內容匯入另一個樣式表。匯入樣式表比匯入樣式表具有更高的優先順序。
宣告
以下是<xsl:import>元素的語法宣告。
<xsl:import href = "uri"> </xsl:import>
屬性
序號 | 名稱和說明 |
---|---|
1. | href 用於傳遞要匯入的 xslt 樣式表的路徑 . |
元素
出現次數 | 無限 |
父元素 | xsl:stylesheet, xsl:transform |
子元素 | 無 |
演示示例
此示例透過迭代每個學生,建立一個<student>元素的列表,其中包含其屬性rollno及其子元素<firstname>、<lastname>、<nickname>和<marks>。這裡我們建立了兩個 xsl 樣式表,其中 students_imports.xsl 樣式表匯入 students.xsl,並且 students.xml 連結到 students_imports.xsl。
students.xml
<?xml version = "1.0"?> <?xml-stylesheet type = "text/xsl" href = "students_imports.xsl"?> <class> <student rollno = "393"> <firstname>Dinkar</firstname> <lastname>Kad</lastname> <nickname>Dinkar</nickname> <marks>85</marks> </student> <student rollno = "493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>Vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>Jasvir</firstname> <lastname>Singh</lastname> <nickname>Jazz</nickname> <marks>90</marks> </student> </class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?> <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:template match = "/"> <html> <body> <h2>Students</h2> <table border = "1"> <tr bgcolor = "#9acd32"> <th>Roll No</th> <th>First Name</th> <th>Last Name</th> <th>Nick Name</th> <th>Marks</th> </tr> <xsl:for-each select = "class/student"> <tr> <td><xsl:value-of select = "@rollno"/></td> <td><xsl:value-of select = "firstname"/></td> <td><xsl:value-of select = "lastname"/></td> <td><xsl:value-of select = "nickname"/></td> <td><xsl:value-of select = "marks"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
students_imports.xsl
<?xml version = "1.0" encoding = "UTF-8"?> <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:import href = "students.xsl"/> <xsl:template match = "/"> <xsl:apply-imports/> </xsl:template> </xsl:stylesheet>
輸出
