一个人跳舞

导航

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

关于模板其他元素的介绍
元素名及说明
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的具体内容。

posted on 2005-04-20 08:43  煮鹤焚琴  阅读(325)  评论(0编辑  收藏  举报