现在的位置: 首页 > 综合 > 正文

Schema关于模板其他元素的介绍

2012年07月26日 ⁄ 综合 ⁄ 共 3551字 ⁄ 字号 评论关闭

关于模板其他元素的介绍

元素名及说明

xsl:apply-imports                  

调用导入的外部模板,可以应用为部分文档的模板

xsl:apply-templates

应用模板,通过""两个属性关键字确定要应用的模板。当多个模板符合要求时,根据优先级选择模板,同优先级时应用最后出现的样式

xsl:attribute

为元素输出定义属性节点,属性关键自"name"定义属性名,"namespace"声明名字空间

xsl:attribute-set

定义一组属性节点。关键字"name"定义组结点名,"use-attribute-sets"声明匹配属性到每个节点

xsl:call-template

调用由call-template指定的模板

xsl:choose

根据条件调用模板

xsl:comment

在输出加入注释

xsl:copy

复制当前节点到输出

xsl:copy-of

复制当前节点的所有子树,比如属性节点、自节点等到输出

xsl:decimal_format

定义格式化数字函数输出的小数格式,如"decimal-separator、infinity"等

xsl:element

在输出中创建新元素

xsl:fallback

当XML分析器不支持当前的XML版本时,会调用这个元素来判断能否正常处理,如不能则改用默认方式处理,并输出报错信息

xsl:for-each

循环调用模板匹配每个节点

xsl:if

模板在简单情况下的条件调用

xsl:import

导入样式单,只能作为"xsl:stylesheet"和"xsl:transfor"的字节点使用。导入的样式单优先级最高(高于当前样式单和"xsl:include"指定的样式单)

xsl:include

导入其他样式单,其应用的方式与"xsl:import"类似

xsl:key

定义关键字,再使用key()函数作出关键字判断,主要应用在XPath中

xsl:message

发送文本消息给消息缓冲区或消息对话框

xsl:namespace-alias

改变当前名称空间

xsl:number

在结果树中插入带格式的数字

xsl:otherwise

条件调用模板

xsl:output

为序列化结果树指定应用选项

xsl:param

为xsl:stylesheet或xsl:template指定参数

xsl:preserve-space

在文档中保留空格

xsl:processing-instruction

在输出中加入处理指令

msxsl:script

在扩展脚本中定义全局变量、函数

xsl:sort

排序节点

xsl:strip-space

合并文档的空格

xsl:stylesheet

指定样式单

xsl:template

指定模板

xsl:text

输出文本

xsl:transform

等同xsl:template

xsl:value-of

为选定节点加入文本值

xsl:variable

声明表达式中的变量

xsl:when

选择模板

xsl:with-param

撤消模板参数

除了上面提到的类似函数调用的循环匹配模板方式,XSLT还有其他类似于我们常见的程序设计语言的元素。下面我们介绍简单条件下(只有匹配和不匹配两种情况)和多选择条件下的模板匹配调用方式。

简单条件下的模板调用格式为:

<xsl:if text="布尔表达式">

……

</xsl:if>

当布尔表达式的值为真时,执行省略号代表的内容,否则跳过这些内容。这只能判断两种情况。当需要判断多种情况,选择匹配模板时,配合使用元素<xsl:choose>、<xsl:otherwise>和<xsl:when>,格式如下:

<xsl:template match="">

   <xsl:choose>

      <xsl:when test="布尔表达式A">

      //代码段1

      </xsl:when>

      <xsl:when test="布尔表达式B">

      //代码段2

      </xsl:when>

      <xsl:otherwise>

      //代码段3

      </xsl:otherwise>

     </xsl:choose>

    <xsl:apply-templates/>

  </xsl:template>

就像程序设计语言一样:布尔表达式A为真时,编译执行代码段1;表达式B为真时,执行代码段2;其他情况下,执行代码段3。我们可以通过这两种方法,有选择的对部分XML文档加以表现。

下面给出一些实例,演示如何使用表中的元素来完成XML的转换。

创建元素的写法是:

<xsl:element name="TITLE">

This is a test.

</xsl:element>

得到的元素为:

<TITLE>This is a test.</TITLE>

创建属性需要使用元素"xsl-attribute"。比如为元素"TITLE"创建的属性"ID"的写法是:

<TITLE>

   <xsl:attribute name="ID">

        title1

   </xsl:attribute>

This is a test.

</TITLE>

为元素"TITLE"创建的属性为:

<TITLE ID ="title1">This is a test.</TITLE>

我们还可以在文档中加入注释来增加代码的可读性:

<xsl:comment>Create a title.</xsl:comment>

转换后,得到的注释如下:

<!--Create a title-->

在前面的表中,我们讲到使用"copy"和"copy-of"复制节点,比如:

<?xml version="1.0"?>

<A id="001">

   <B>comment</B>

   <C>text</C>

</A>

我们使用样式单来复制节点:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="A">

    <DIV>

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

    </DIV>

    <DIV>

      <xsl:copy/>

    </DIV>

</xsl:template>

</xsl:stylesheet>

转换的结果是:

<DIV>

    <A id="001"><B>comment</B><C>text</C>

</DIV>

<DIV>

    <A/>

</DIV>

得到这样的结果是因为"xsl:copy-of"拷贝当前节点的所有内容,包括节点本身、属性和子元素。而“xsl:copy”只拷贝当前节点本身。

XSLT可以将XML文档转换为多种类型的文档,我们使用元素“xsl:output”来指定输出的文档类型。

<xsl:output method="html">

受蜜柑内输出的文档类型为html文档。输出的文档类型默认是XML文档,除非指定了输出的文档类型。如果在模板中使用“<html>”标记,这样输出的文档类型是html文档。

"xsl:sort"元素可以将节点进行排序,比如,按照大小排序:

<xsl:sort case-order="lower-first" select="@ID">

<xsl:sort case-order="upper-first" select="@ID">

此时,按照使用"case-order"指定的方式,根据关键字ID排序。当“case-order”指定“lower-first”时,关键字ID值小写的在前,当"case-order"指定为“upper-first”时,关键字ID值大写的在前。

如果写成:

<xsl:sort order="ascending" select="@ID">

则排序的依据变为根据关键字的字母进行升序排序。如果"order"的值变为"descending",那么将根据关键字的字母进行降序排序。这里关键字依然是“ID”属性的值。

"xsl:sort"元素还可以根据数字进行排序。有两种方法:

<xsl:sort data-type="text" select="@ID">

<xsl:sort data-type="number" select="@ID">

有一组ID属性值:156,26,7,34。使用前一种方法得到的结果是:156,26,34,7。使用第二种方法得到的结果是:7,26,34,156。两种方法区别不言而明。

"xsl:sort"还可以根据自定义的关键字来排序。比如:<xsl:for-each select="A" order-by="B">

指明匹配节点“A”,根据关键字B排序A的内容。

后面我们将介绍XPath的具体内容。

抱歉!评论已关闭.