XSL是(Extensible Style sheet Language)的缩写,是一种描述XML样式的语言。XML没有预先定义的标签,所以每个标签的寓意并不可知,XSL则用来描述XML文档如何展示。
XSL包含三部分的内容:
XSLT—XML文档转换语言
XPath—XML文档导航语言
XSL-FO—XML文档格式语言
XSLT是XSL Transformations的缩写;用于将XML文档转换为XHTML文档或其它格式的文档;XSLT是XSL的重要组成部分;XSLT使用XPath定位XML中的节点;XSLT是W3C标准。
XSLT被用作转换XML文档成另一个XML文档,或者其它被浏览器所识别的文档,比如HTML和XHTML。通常XSLT做这些转换只需将每个XML节点转换为(X)HTML相应的节点。你能用XSLT增加/删除XML文档的节点或属性,也可以重排或排序节点,执行测试或决定某一节点是隐藏还是显示,等等。可以理解为将“XML源树”转换为“XML结果树”。
在转换的过程中,XSLT使用XPath来定义源文档的结构,源文档必须匹配一个或多个预定义的模板。当匹配成功是XSLT将转换源文档匹配的部分成结果文档。
<xsl:stylesheet>或<xsl:transform>都可以作为XSLT文档的根节点,
定义文档为XLS样式表
W3C官方指定的XSLT的命名空间为xmlns:xsl="http://www.w3.org/1999/XSL/Transform"。
如果使用W3C官方指定的命名空间,则值需为version=”1.0”
根据W3C标准,一个XSL样式表正确的定义为:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
或
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">。
<xsl:template>标签用于定义模板
用于匹配XML源文档中的元素,也可以匹配整个XML文档。Match的值为XPath表达式(如 match=”/” 表示匹配整个XML文档)。
<xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> </body> </html> </xsl:template>
Xsl:value-of
元素元素
<xsl:value-of>标签用于提取XML元素的值,并将它加入到输出文件中。
Select的值也为XPath表达式
<xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <tr> <td><xsl:value-of select="catalog/cd/title"/></td> <td><xsl:value-of select="catalog/cd/artist"/></td> </tr> </table> </body> </html> </xsl:template>
Xsl:for-each
元素元素
<xsl:for-each>标签用于遍历指定的XML元素集合。
值为XPath表达式。我们也可以增加过滤条件
合法的过滤操作有:=(等于) !=(不等于) <(小于) >(大于)
<xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template>
Xsl:sort
元素元素
<xsl:sort>标签嵌入到<xsl:for-each>标签中使用,用于将指定的元素集合排序。
<xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <xsl:sort select="artist"/> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template>
Xsl:if
元素 元素
语法格式<xsl:if test="expression">
如果”expression”为真的输出结果
</xsl:if>
<xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <xsl:if test="price > 10"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:if> </xsl:for-each> </table> </body> </html> </xsl:template>
Xsl:choose
元素 元素
<xsl:choose>标签用于多条件判断,语法:
<xsl:choose>
<xsl:when test="expression">
... some output ...
</xsl:when>
<xsl:otherwise>
... some output ....
</xsl:otherwise>
</xsl:choose>
<xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <xsl:choose> <xsl:when test="price > 10"> <td bgcolor="#ff00ff"> <xsl:value-of select="artist"/></td> </xsl:when> <xsl:when test="price > 9"> <td bgcolor="#cccccc"> <xsl:value-of select="artist"/></td> </xsl:when> <xsl:otherwise> <td><xsl:value-of select="artist"/></td> </xsl:otherwise> </xsl:choose> </tr> </xsl:for-each> </table> </body> </html> </xsl:template>
Xsl:apply-templates
元素元素
<xsl:apply-templates>标签应用一个模板到当前节点或者子节点。如果我们增加”select”属性,它只处理Select所匹配的子节点,我们也可以select属性来定义子节点的处理顺序。
<xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="cd"> <p> <xsl:apply-templates select="title"/> </p> </xsl:template> <xsl:template match="title"> Title: <span style="color:#ff0000"> <xsl:value-of select="."/></span> <br /> </xsl:template>