XSLT 快速指南


XSLT 概述

XSL

在学习XSLT之前,我们首先应该了解XSL ,它代表EXtensibleStylesheetLanguage。它与 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 的工作流程

优点

以下是使用 XSLT 的优点 -

  • 独立于编程。转换被写入一个单独的 xsl 文件中,该文件也是一个 XML 文档。

  • 只需修改 xsl 文件中的转换即可更改输出。无需更改任何代码。因此,Web 设计人员可以编辑样式表,并可以快速查看输出中的更改。

XSLT 语法

假设我们有以下示例 XML 文件,students.xml,需要将其转换为格式良好的 HTML 文档。

学生.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 样式表文档以满足以下条件 -

  • 页面应该有一个标题Students

  • 页面应该有一个学生详细信息表。

  • 列应具有以下标题:卷号、名字、姓氏、昵称、分数

  • 表必须相应地包含学生的详细信息。

第 1 步:创建 XSLT 文档

创建一个XSLT文档来满足上述要求,将其命名为students.xsl并将其保存在students.xml所在的同一位置。

学生.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 文档

学生.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 <模板>

<xsl:template> 定义了一种重用模板的方法,以便为特定类型/上下文的节点生成所需的输出。

宣言

以下是<xsl:template>元素的语法声明。

<xsl:template 
   name = Qname 
   match = Pattern 
   priority = number 
   mode = QName >
</xsl:template>

属性

先生编号 名称和描述
1

姓名

要应用模板的元素的名称。

2

匹配

表示要应用模板的元素的模式。

3

优先事项

模板的优先级编号。在高优先级模板前面不考虑匹配低优先级模板。

4

模式

允许多次处理元素以每次产生不同的结果。

元素

出现次数 无限

父元素

xsl:样式表、xsl:转换

子元素

xsl:应用导入,xsl:应用模板,xsl:属性,xsl:调用模板,xsl:选择,xsl:注释,xsl:复制,xsl:复制,xsl:元素,xsl:后备,xsl: for-each、xsl:if、xsl:message、xsl:number、xsl:param、xsl:processing-instruction、xsl:text、xsl:value-of、xsl:variable、输出元素

演示示例

该模板规则具有识别 <student> 元素并以表格格式生成输出的模式。

学生.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>

学生导入.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 <值>

<xsl:value-of> 标记将所选节点的值按照 XPath 表达式作为文本放置。

宣言

以下是<xsl:value-of>元素的语法声明。

<xsl:value-of
   select = Expression
   disable-output-escaping = "yes" | "no" >
</xsl:value-of>

属性

先生编号 名称和描述
1

选择

要在当前上下文中计算的 XPath 表达式。

2

禁用输出转义

默认-“否”。如果为“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 instructions、xsl:template 、 xsl:variable、xsl:when、xsl:with-param、输出​​元素

子元素

没有任何

演示示例

此示例创建一个 <student> 元素表,其属性为rollno及其子元素 <firstname>、<lastname>、<nickname> 和 <marks>。

学生.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>

学生.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 <对于每个>

<xsl:for-each> 标记为每个节点重复应用模板。

宣言

以下是<xsl:for-each>元素的语法声明

<xsl:for-each
   select = Expression >  
</xsl:for-each>

属性

先生编号 名称和描述
1

选择

要在当前上下文中计算的 XPath 表达式以确定要迭代的节点集。

元素

出现次数 无限

父元素

xsl:属性、xsl:注释、xsl:复制、xsl:元素、xsl:后备、xsl:foreach、xsl:if、xsl:消息、xsl:否则、xsl:参数、xsl:处理指令、xsl:模板、xsl:变量、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>。

学生.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>

学生.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 <排序>

<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

选择

节点的排序键。

2

用于确定排序顺序的语言字母表。

3

数据类型

文本的数据类型。

4

命令

排序顺序。默认为“升序”。

5

案例顺序

字符串按大小写排序。默认为“上层优先”。

元素

出现次数 无限
父元素 xsl:应用模板,xsl:for-each
子元素 没有任何

演示示例

此示例创建一个 <student> 元素表,其属性为rollno及其子元素 <firstname>、<lastname>、<nickname> 和 <marks>,方法是迭代每个学生按名字排序。

学生.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>

学生.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 <如果>

<xsl:if> 标记指定针对节点内容的条件测试。

宣言

以下是<xsl:if>元素的语法声明。

<xsl:if 
  test = boolean-expression > 
</xsl:if> 

属性

先生编号 名称和描述
1

测试

要测试的 xml 数据中的条件。

元素

出现次数 无限

父元素

xsl:属性、xsl:注释、xsl:复制、xsl:元素、xsl:后备、xsl:for-each、xsl:if、xsl:消息、xsl:otherwise、xsl:param、xsl:处理指令、xsl:模板、xsl:variable、xsl:when、xsl:with-param、输出​​元素

子元素

xsl:应用模板、xsl:属性、xsl:调用模板、xsl:选择、xsl:注释、xsl:复制、xsl:复制、xsl:元素、xsl:for-each、xsl:if、xsl:处理指令、xsl:text、xsl:value-of、xsl:variable、输出元素

演示示例

此示例通过迭代每个学生来创建一个 <student> 元素及其属性rollno及其子元素 <firstname>、<lastname>、<nickname> 和 <marks>的表。它检查分数是否大于 90,然后打印学生的详细信息。

学生.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>

学生.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>

输出

格式化 IF 输出

XSLT <选择>

<xsl:choose> 标记与 <xsl:otherwise> 和 <xsl:when> 元素结合指定对节点内容的多个条件测试。

宣言

以下是<xsl:choose>元素的语法声明。

<xsl:choose >
</xsl:choose>

元素

出现次数 无限

父元素

xsl:属性、xsl:注释、xsl:复制、xsl:元素、xsl:后备、xsl:for-each、xsl:if、xsl:消息、xsl:otherwise、xsl:param、xsl:处理指令、xsl:模板、xsl:variable、xsl:when、xsl:with-param、输出​​元素

子元素

xsl:否则,xsl:当

演示示例

此示例通过迭代每个学生来创建一个 <student> 元素及其属性rollno及其子元素 <firstname>、<lastname>、<nickname> 和 <marks>的表。它检查然后打印成绩详细信息。

学生.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>

学生.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 <键>

<xsl:key> 标记元素指定分配给 XML 文档中特定元素的命名名称-值对。该键与 XPath 表达式中的 key() 函数一起使用,以访问 XML 文档中指定的元素。

宣言

以下是<xsl:key>元素的语法声明。

<xsl:key 
   name = QName 
   match = Pattern 
   use = Expression > 
</xsl:key>

属性

序列号 名称和描述
1

姓名

要使用的密钥的名称。

2

匹配

用于识别持有该密钥的节点的模式。

3

使用

XPath表达式来标识xml文档的节点值。

元素

出现次数 无限
父元素 xsl:样式表
子元素 没有任何

演示示例

此示例通过迭代每个学生来创建一个 <student> 元素及其属性rollno及其子元素 <firstname>、<lastname>、<nickname> 和 <marks>的表。它检查键作为名字是否是学生的名字之一,然后打印学生的详细信息。

学生.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>

学生.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> 标记元素有助于调试 XSLT 处理。它类似于 javascript 警报。<xsl:> 标记将消息缓冲到 XSLT 处理器,该处理器终止处理并向调用者应用程序发送消息以显示错误消息。

宣言

以下是<xsl:message>元素的语法声明。

<xsl:message 
   terminate = "yes" | "no" >
</xsl:message>

属性

先生编号 名称和描述
1

终止

它指定转换是否应在执行该指令时终止。默认为“是”。

元素

出现次数 无限
父元素

xsl:属性、xsl:注释、xsl:复制、xsl:元素、xsl:后备、xsl:foreach、xsl:if、xsl:消息、xsl:否则、xsl:参数、xsl:处理指令、xsl:模板、xsl:变量、xsl:when、xsl:with-param、输出​​元素

子元素

xsl:应用模板、xsl:属性、xsl:调用模板、xsl:选择、xsl:注释、xsl:复制、xsl:复制、xsl:元素、xsl:for-each、xsl:if、xsl:处理指令、xsl:text、xsl:value-of、xsl:variable、输出元素

演示示例

此示例通过迭代每个学生来创建一个 <student> 元素及其属性rollno及其子元素 <firstname>、<lastname>、<nickname> 和 <marks>的表。它检查键作为名字是否存在,然后打印学生详细信息,否则显示错误消息。

学生.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>

学生.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 <应用模板>

<xsl:apply-template> 标记指示 XSLT 处理器根据每个选定节点的类型和上下文查找要应用的适当模板。

宣言

以下是<xsl:apply-template>元素的语法声明。

<xsl:apply-template 
   select = Expression 
   mode = QName > 
</xsl:apply-template> 

属性

先生编号 名称和描述
1

选择

用于处理由 XPath 表达式选择的节点,而不是处理所有子节点。

2

模式

允许多次处理由其限定名称指定的元素,每次都会产生不同的结果。

元素

出现次数 无限

父元素

xsl:属性、xsl:注释、xsl:复制、xsl:元素、xsl:后备、xsl:foreach、xsl:if、xsl:消息、xsl:否则、xsl:参数、xsl:处理指令、xsl:模板、xsl:变量、xsl:when、xsl:with-param、输出​​元素

子元素

xsl:排序,xsl:带参数

演示示例

此示例通过迭代每个学生来创建一个 <student> 元素及其属性rollno及其子元素 <firstname>、<lastname>、<nickname> 和 <marks>的列表。

学生.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>

学生.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 <导入>

<xsl:import> 标签将一个样式表的内容导入到另一个样式表中。导入样式表比导入样式表具有更高的优先级。

宣言

以下是<xsl:import>元素的语法声明。

<xsl:import href = "uri"> 
</xsl:import>

属性

先生编号 名称和描述
1.

链接地址

用于传递要导入的xslt样式表的路径

元素

出现次数 无限
父元素 xsl:样式表、xsl:转换
子元素 没有任何

演示示例

此示例通过迭代每个学生来创建一个 <student> 元素及其属性rollno及其子元素 <firstname>、<lastname>、<nickname> 和 <marks>的列表。这里我们创建了两个xsl样式表,其中students_imports.xsl样式表导入students.xsl并且students.xml链接到students_imports.xsl。

学生.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>

学生.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>

学生导入.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> 

输出

格式化导入模板输出