Before learning XSLT, we should first understand XSL which stands for EXtensible Stylesheet Language. It is similar to XML as CSS is to HTML.
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 - used to transform XML document into various other types of document.
XPath - used to navigate XML document.
XSL-FO - 用于格式化XML文档。
XSLT,可扩展样式表语言转换提供了将XML数据从一种格式自动转换为另一种格式的功能。
XSLT样式表用于定义要应用于目标XML文档的转换规则。XSLT样式表是用XML格式编写的。XSLT处理器采用XSLT样式表,并将转换规则应用于目标XML文档,然后以XML,HTML或文本格式的形式生成格式化文档。然后,这个格式化的文档被XSLT格式化程序用来生成要显示给最终用户的实际输出。
以下是使用XSLT的优点 -
独立于编程。转换是以单独的xsl文件编写的,该文件又是一个XML文档。
可以通过简单地修改xsl文件中的转换来改变输出。无需更改任何代码。所以网页设计师可以编辑样式表,并可以快速查看输出的变化。
我们假设我们有以下示例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样式表文档,以满足以下条件 -
页面应该有一个标题学生。
页面应该有一张学生细节表。
列应具有以下标题:卷号,名字,姓氏,昵称,标记
表必须包含学生的细节。
创建一个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>
使用以下xml样式表标记更新student.xml文档。将href值设置为students.xsl
<?xml version = "1.0"?> <?xml-stylesheet type = "text/xsl" href = "students.xsl"?> <class> ... </class>
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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
根据每个选定节点的类型和上下文,<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>
<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>