XSLT是XML文档转换语言,虽然不能直接定义显示方式,但可以通过将XML文档转换成能够显示的格式,以达到指定样式的目的。由于XSLT的目的是指定样式,因此并不能说是完全的通用转换语言。目前来说,XML文档转换的许多场合下都可以使用XSLT。
创建XSLT样式表,其中心就是定义模板。XSLT样式表可以说是模板规则的集合。
模板规则使用xsl:template元素进行定义。它的属性包括match、name、priority和mode。其中最重要的是match属性,该属性规定了节点的样式。若没有指定name属性的话,就必须指定match属性。
使用xsl:apply-template元素来应用模板规则。它包含select和mode属性。
xsl:value-of元素可以将指定的节点的值作为字符串来输出。必须要指定select属性。
xsl:value-of元素将节点的值转换为字符串。与此相对,xsl:copy-of元素将复制节点,节点中包含的子元素原封不动。
需要生成属性值时,可以使用大括号{}将表达式括起来。
xsl:text元素可以生成文本节点。由于生成文本时直接将文本写出即可,所以一般情况下该元素不使用。但是若需要令输出的转义字符失效的话就需要使用该元素。
需要生成注释时可以使用xsl:comment元素。
复制当前节点可以使用xsl:copy元素。属性和子节点不会被自动复制。
需要生成元素时可以使用xsl:element元素。通常,只要将需要生成的元素直接写出即可,不必使用xsl:element元素。该元素仅在需要动态生成元素时才有必要使用。
需要生成属性时可以使用xsl:attribute元素。与生成元素的情况相同,通常只需要将需要生成的属性直接写出即可,不需使用xsl:attribute元素。该元素仅在需要动态生成属性等场合才有必要使用。
需要输出整数值时可以使用xsl:number元素。
需要循环进行处理时可以使用xsl:for-each元素。必须设置select属性,来指定被处理的节点集合。如果使用了后面讲述的排序的话则按照排序结果的顺序进行处理,否则按照节点出现顺序进行处理。
在XSLT中,进行条件处理的元素有xsl:if和xsl:choose两个。xsl:if进行“如果就”的if-then型处理,xsl:choose当有多个选择项存在时进行处理。xsl:if元素拥有test属性,可指定逻辑表达式。逻辑表达式为真的情况下执行模板的转换,假的情况下不进行转换。xsl:choose元素由一个或一个以上的xsl:when元素和可选的xsl:otherwise元素组成。与xsl:if元素相同,test属性的逻辑表达式为真的情况下执行指定的模板。从上到下依次测试xsl:when元素,但只有第一个逻辑表达式为真的xsl:when院所的模板会被执行。如果所有的xsl:when元素的逻辑表达式均为假,则执行xsl:otherwise元素所指定的模板。xsl:otherwise元素不存在时则不执行任何模板。
为将数据排序,可以在xsl:apply-templates元素或xsl:for-each元素的子节点中增加xsl:sort元素。通过select属性指定排序的节点。通过data-type属性指定字符串的数据类型。设置为text就能够按照人们默认的字典顺序进行排序。设置为number将把字符串看作数字,按照数字的值进行排序。order属性设置排序的顺序。升序为ascending、降序为descending。未指定时默认为升序。其他能够设置的属性包括设置语言的lang属性,设置大小写字母哪个优先的case-order属性等。
在XSLT中可以使用变量。可以为变量赋值的元素有xsl:variable元素和xsl:param元素。在表达式中访问变量时,需要在变量名前加上$符号。使用xsl:value-of元素访问变量则可以输出变量的值。