XSLT 学习笔记

XSLT 初学者,整理一些用法,加深记忆:

普通语法

0. 输出 HTML5 <!DOCTYPE html>

<xsl:output method="html"
  encoding="UTF-8"
  indent="yes" />

<xsl:template match="/">
  <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html></xsl:text>
  <html></html>
</xsl:template>

1. 创建变量

<xsl:variable name="variable_name"> </xsl:variable>

<xsl:variable name="variable_name" select=" " />

调用变量:$variable_name, Emmet 缩写 val

2. 创建模板与调用模板

<xsl:template name=""></xsl:template>

Emmet 缩写 tn

<xsl:call-template name=""/>

Emmet 缩写 call

3. value-ofcopy-of

<xsl:value-of select=" " />

<xsl:copy-of select=" " />

后者包含 HTML 标签, Emmet 缩写 val co

4. 条件选择

<xsl:choose>
  <xsl:when test=""></xsl:when>
  <xsl:otherwise></xsl:otherwise>
</xsl:choose>

Emmet 缩写 ch wh ot

5. if 判断

<xsl:if test=""></xsl:if>

Emmet 缩写 if

6. for-each 输出

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

Emmet 缩写 each

7. 修改属性

<xsl:attribute name=""></xsl:attribute>

例如, for-each 输出的第一项添加 offset1 class

<xsl:for-each select="">
  <div class="span4">
    <xsl:choose>
      <xsl:when test="positon() = 1">
        <xsl:attribute name="class">span4 offset1</xsl:attribute>
      </xsl:when>
    </xsl:choose>

    <!-- code -->
  </div>
</xsl:for-each>

Emmet 缩写 attr

8. 获取 handle 值

<xsl:value-of select="entry/@handle"/>

9. 选择 handle 是某个具体值的条目

<xsl:value-of select="entry[@handle='yes']"/>

10. 选择第 n 个条目

entry[n]

XSLT 函数

XSLT 1.0 函数列表 http://zvon.org/xxl/XSLTreference/Output/xpathFunctionIndex.html

1. for-each 输出位置

position()

选择奇数项:

position() mod 2 = 1

2. 选择节点本身

self::node()

3. 截取内容

substring(string, start, length)

4. 连接字符串

<xsl:variable name="new-string" select="concat($variable-1, 'string', $variable-2)"/>

5. for-each 循环 n 次

<xsl:for-each select="(//node())[n >= position()]"></xsl:for-each>

http://stackoverflow.com/questions/9076323/xslt-looping-from-1-to-60