XSL的基本语法 博客分类: xsl xsl
程序员文章站
2024-02-20 22:33:22
...
http://www.w3school.com.cn/xsl/el_output.asp
⊙XSL模板
模板是XSL中最重要的概念之一,XSL文件就是由一个一个的模板组成的,任何一个XSL文件至少包含一个模板.
定义一个模板的基本语法是:
<xsl:template match="pattern">
<!--输出模板-->
</xsl:template>
属性match则控制模板的匹配模式,确定在什么情况下执行此模板.属性match的取值把模板规则与指定的元素或属性相比较,只有指定的节点才会被处理.其中最上层的模板即根节点必须将match的取值设定为"/".
如果match的取值为"*",那么表示该规则适用于所有的未单独指定处理的元素节点.此外,还可以使用路径指定符来指定一些特殊位置的元素与模板相匹配. "//"代表任意深度位置,如<xsl:template match="//student">用来匹配文档中任何位置的<student>元素;而如果是<xsl:template match="student//name">则表明是匹配<student>元素的后继节点中所有<name>元素.另外一个路径指定符是"/",表示直接的父子节点关系.<xsl:template match="student/name">则是匹配的是<student>元素子节点中的<name>元素.
模板定义完毕后,就可以在XSL中调用该模板了,调用一个模板的语法为:
<xsl:apply-templates select="pattern"/>
<xsl:apply-templates>用来说明哪一个节点被模板具体处理.select属性用来定义确切的节点名称.<xsl:apply-templates>总是包含在<xsl:template>元素中,像这样:
<xsl:template match="/">
<xsl:apply-templates select="roster"/>
</xsl:template>
直接使用<xsl:templates>元素表示不加区分地对当前节点的所有子节点应用模板,而在select属性中书写
匹配式则能够限定作用对象.
⊙节点选择句<xsl:value-of>
在许多场合,输出模板中需要使用节点的取值,此时需要使用<xsl:value-of select="pattern" />语句输出节点值,最直接的使用方式是使用空元素<xsl:values-of />,这样可以输出当前节点及其后继节点的取值.而如果仅仅是想输出指定节点的取值,可以利用select属性进行限定(select属性可以是任意合法的路径表达式).
<xsl:value-of select="name" /> 匹配当前节点的所有子节点为<name>的元素.
<xsl:value-of select="//student" /> 匹配当前节点中所有后继节点名为<student>的元素.
在XSL样式表中必须有一个模板规则与根元素相匹配.
⊙循环判断语句<xsl:for-each>
在XML文档中,如果存在两条以上的数据,必须使用<xsl:for-each>元素指定上层的节点元素,再用<xsl:value-of>设定要输出的内容,才能显示整个XML文档数据.
标准语法格式为:
<xsl:for-each select="pattern" order-by="patternlist">
......
</xsl:for-each>
属性order-by的内容为排序标准列表,在列表元素前面添加加号(+)表示按升序排序,添加减号(-)表示按降序排列.
⊙条件判断句<xsl:if>
<xsl:if>语句是简单地对条件进行判断.它有三种用法:
1.如果要用元素的名称作为匹配条件,语法: <xsl:if match="元素名称">
下例对"name"元素的内容用红色来显示:
<xsl:if match="name">
<font color="red"></xsl:value-of /></font>
</xsl:if>
2. 如果用元素内容作为匹配条件,语法为: <xsl:if match="元素名称[.'元素内容']">
下例对成绩超过100分的学生输出"满分"信息.
<xsl:if match="score[.='100']">
满分
</xsl:if>
3. 如果用元素的属性作为匹配条件,语法为: <xsl:if test=".[@属性名称='属性值']">
下例是对ID号为105的学生输出"105号学生"信息:
<xsl:if test=".[@ID='105']">
105号学生
</xsl:if>
⊙多条件判断语句<xsl:choose>
与<xsl:when>和<xsl:otherwise>一起使用,可以进行多条条的分支判断.
下列例子对成绩不到80分的学生输出"一般",对超过90分的学生输出"优秀",对介于其间的学生输出"良好"信息:
<xsl:choose>
<xsl:when match=".[score $lt$ 80]">一般</xsl:when>
<xsl:when match=".[score $gt$ 90]">优秀</xsl:when>
<xsl:otherwise>良好</xsl:otherwise>
</xsl:choose>
⊙排序语句<xsl:sort>
在XSL中可以对XML源文档的元素进行重新排序,排序的语法就是<xsl:sort>.下列代码就是将文档元素按name排序.
<xsl:template match="student">
<xsl:apply-templates select="student">
<xsl:sort select="@name"/>
<xsl:apply-templates>
</xsl:template>
⊙XSL模板
模板是XSL中最重要的概念之一,XSL文件就是由一个一个的模板组成的,任何一个XSL文件至少包含一个模板.
定义一个模板的基本语法是:
<xsl:template match="pattern">
<!--输出模板-->
</xsl:template>
属性match则控制模板的匹配模式,确定在什么情况下执行此模板.属性match的取值把模板规则与指定的元素或属性相比较,只有指定的节点才会被处理.其中最上层的模板即根节点必须将match的取值设定为"/".
如果match的取值为"*",那么表示该规则适用于所有的未单独指定处理的元素节点.此外,还可以使用路径指定符来指定一些特殊位置的元素与模板相匹配. "//"代表任意深度位置,如<xsl:template match="//student">用来匹配文档中任何位置的<student>元素;而如果是<xsl:template match="student//name">则表明是匹配<student>元素的后继节点中所有<name>元素.另外一个路径指定符是"/",表示直接的父子节点关系.<xsl:template match="student/name">则是匹配的是<student>元素子节点中的<name>元素.
模板定义完毕后,就可以在XSL中调用该模板了,调用一个模板的语法为:
<xsl:apply-templates select="pattern"/>
<xsl:apply-templates>用来说明哪一个节点被模板具体处理.select属性用来定义确切的节点名称.<xsl:apply-templates>总是包含在<xsl:template>元素中,像这样:
<xsl:template match="/">
<xsl:apply-templates select="roster"/>
</xsl:template>
直接使用<xsl:templates>元素表示不加区分地对当前节点的所有子节点应用模板,而在select属性中书写
匹配式则能够限定作用对象.
⊙节点选择句<xsl:value-of>
在许多场合,输出模板中需要使用节点的取值,此时需要使用<xsl:value-of select="pattern" />语句输出节点值,最直接的使用方式是使用空元素<xsl:values-of />,这样可以输出当前节点及其后继节点的取值.而如果仅仅是想输出指定节点的取值,可以利用select属性进行限定(select属性可以是任意合法的路径表达式).
<xsl:value-of select="name" /> 匹配当前节点的所有子节点为<name>的元素.
<xsl:value-of select="//student" /> 匹配当前节点中所有后继节点名为<student>的元素.
在XSL样式表中必须有一个模板规则与根元素相匹配.
⊙循环判断语句<xsl:for-each>
在XML文档中,如果存在两条以上的数据,必须使用<xsl:for-each>元素指定上层的节点元素,再用<xsl:value-of>设定要输出的内容,才能显示整个XML文档数据.
标准语法格式为:
<xsl:for-each select="pattern" order-by="patternlist">
......
</xsl:for-each>
属性order-by的内容为排序标准列表,在列表元素前面添加加号(+)表示按升序排序,添加减号(-)表示按降序排列.
⊙条件判断句<xsl:if>
<xsl:if>语句是简单地对条件进行判断.它有三种用法:
1.如果要用元素的名称作为匹配条件,语法: <xsl:if match="元素名称">
下例对"name"元素的内容用红色来显示:
<xsl:if match="name">
<font color="red"></xsl:value-of /></font>
</xsl:if>
2. 如果用元素内容作为匹配条件,语法为: <xsl:if match="元素名称[.'元素内容']">
下例对成绩超过100分的学生输出"满分"信息.
<xsl:if match="score[.='100']">
满分
</xsl:if>
3. 如果用元素的属性作为匹配条件,语法为: <xsl:if test=".[@属性名称='属性值']">
下例是对ID号为105的学生输出"105号学生"信息:
<xsl:if test=".[@ID='105']">
105号学生
</xsl:if>
⊙多条件判断语句<xsl:choose>
与<xsl:when>和<xsl:otherwise>一起使用,可以进行多条条的分支判断.
下列例子对成绩不到80分的学生输出"一般",对超过90分的学生输出"优秀",对介于其间的学生输出"良好"信息:
<xsl:choose>
<xsl:when match=".[score $lt$ 80]">一般</xsl:when>
<xsl:when match=".[score $gt$ 90]">优秀</xsl:when>
<xsl:otherwise>良好</xsl:otherwise>
</xsl:choose>
⊙排序语句<xsl:sort>
在XSL中可以对XML源文档的元素进行重新排序,排序的语法就是<xsl:sort>.下列代码就是将文档元素按name排序.
<xsl:template match="student">
<xsl:apply-templates select="student">
<xsl:sort select="@name"/>
<xsl:apply-templates>
</xsl:template>