-

XSLT概述

XSL

Before learning XSLT, we should first understand XSL which stands for EXtensible Stylesheet Language. It is similar to XML as CSS is to HTML.

Need for XSL

In case of HTML document, tags are predefined such as table, div, and span; and the browser knows how to add style to them and display those using CSS styles. But in case of XML documents, tags are not predefined. In order to understand and style an XML document, World Wide Web Consortium (W3C) developed XSL which can act as XML based Stylesheet Language. An XSL document specifies how a browser should render an XML document.

Following are the main parts of XSL -

什么是XSLT

XSLT,可扩展样式表语言转换提供了将XML数据从一种格式自动转换为另一种格式的功能。

XSLT如何工作

XSLT样式表用于定义要应用于目标XML文档的转换规则。XSLT样式表是用XML格式编写的。XSLT处理器采用XSLT样式表,并将转换规则应用于目标XML文档,然后以XML,HTML或文本格式的形式生成格式化文档。然后,这个格式化的文档被XSLT格式化程序用来生成要显示给最终用户的实际输出。

XSLT的工作流程

优点

以下是使用XSLT的优点 -

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并将其保存在student.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样式表标记更新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。

比赛

表示要应用模板的元素的图案。

3。

优先

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

4。

模式

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

元素

发生次数 无限

父元素

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。

选择

XPath表达式将在当前上下文中进行评估。

2。

disable-outputescaping

默认 - “否”。如果“是”,输出文本将不会从文本中转义xml字符。

元素

发生次数 无限

父元素

xsl:attribute,xsl:comment,xsl:copy,xsl:element,xsl:fallback,xsl:for-each,xsl:if,xsl:message,xsl:否则,xsl:param,xsl:处理指令,xsl:template ,xsl:variable,xsl:when,xsl:with-param,输出元素

儿童元素

没有

演示范例

此示例使用其属性rollno及其子<firstname>,<lastname>,<nickname>和<marks> 创建一个<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.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。

选择

XPath表达式将在当前上下文中进行评估,以确定要迭代的节点集。

元素

发生次数 无限

父元素

xsl:attribute,xsl:comment,xsl:copy,xsl:element,xsl:fallback,xsl:foreach,xsl:if,xsl:message,xsl:否则,xsl:param,xsl:processinginstruction,xsl:template,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。

演示范例

此示例通过遍历每个学生创建一个具有其属性rollno及其子<firstname>,<lastname> <nickname>和<marks>的<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.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。

选择

排序节点的密钥。

2。

ang

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

3。

数据类型

数据类型的文本。

4。

订购

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

5。

案例顺序

按字母大小写排序字符string顺序。默认值为“upper-first”。

元素

发生次数 无限
父元素 xsl:apply-templates,xsl:for-each
儿童元素 没有

演示范例

此示例通过遍历每个学生以名字对其进行排序,创建具有其属性rollno及其子<firstname>,<lastname>,<nickname>和<marks> 的<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.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。

测试

在xml数据中的条件进行测试。

元素

发生次数 无限

父元素

xsl:attribute,xsl:comment,xsl:copy,xsl:element,xsl:fallback,xsl:for-each,xsl:if,xsl:message,xsl:否则,xsl:param,xsl:processing-instruction,xsl: template,xsl:variable,xsl:when,xsl:with-param,output elements

儿童元素

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:处理指令,xsl:text,xsl:value-of,xsl:variable,输出元素

演示范例

此示例通过遍历每个学生创建一个具有其属性rollno及其子<firstname>,<lastname>,<nickname>和<marks> 的<student>元素的表它检查标记大于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>

输出

格式化IF输出

XSLT <选择>

<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:否则,xsl:param,xsl:processing-instruction,xsl: template,xsl:variable,xsl:when,xsl:with-param,output elements

儿童元素

xsl:否则,xsl:when

演示范例

此示例通过遍历每个学生创建一个具有其属性rollno及其子<firstname>,<lastname>,<nickname>和<marks> 的<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.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。

比赛

用于标识保存此密钥的节点的模式。

3。

使用

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

元素

发生次数 无限
父元素 xsl:stylesheet
儿童元素 没有

演示范例

此示例通过遍历每个学生创建一个具有其属性rollno及其子<firstname>,<lastname>,<nickname>和<marks> 的<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.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。

终止

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

元素

发生次数 无限
父元素

xsl:attribute,xsl:comment,xsl:copy,xsl:element,xsl:fallback,xsl:foreach,xsl:if,xsl:message,xsl:否则,xsl:param,xsl:processinginstruction,xsl:template,xsl:变量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:处理指令,xsl:text,xsl:value-of,xsl:variable,输出元素

演示范例

此示例通过遍历每个学生创建一个具有其属性rollno及其子<firstname>,<lastname>,<nickname>和<marks> 的<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></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。

选择

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

2。

模式

允许其合格名称指定的元素被多次处理,每次产生不同的结果。

元素

发生次数 无限

父元素

xsl:attribute,xsl:comment,xsl:copy,xsl:element,xsl:fallback,xsl:foreach,xsl:if,xsl:message,xsl:否则,xsl:param,xsl:processinginstruction,xsl:template,xsl:变量xsl:when,xsl:with-param,输出元素

儿童元素

xsl:sort,xsl:with-param

演示范例

此示例通过遍历每个学生创建一个具有其属性rollno及其子<firstname>,<lastname>,<nickname>和<marks> 的<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.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
儿童元素 没有

演示范例

此示例通过遍历每个学生创建一个具有其属性rollno及其子<firstname>,<lastname>,<nickname>和<marks> 的<student>元素的列表这里我们创建了两个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> 

输出

格式化导入模板输出