XSLT表达式处理技术

我们将选择你已经在以前的信息里了解的各种各样的功能和表达方式并且描述怎样把他们嵌入在处理指令的顺序里面。通常,这发生在一些标记的元素或者其他标记的元素的范围内,因为这些元素在XSLT里履行了特定的角色的功能,和在很多编程语言内的那些函数或者子程序调用所起到的作用相同。 实际上,在特定的上下文中,你将发现XSLT中的大多数反复和递归结构都靠岸工作的——在接下来的讲解中将会了解到。

  操纵和处理特定的文档节点

  使用<xsl:call-template>来处理一些节点而不是现在的文档节点,最迅速的技术是将元素<xsl:call-template>置于一个<xsl:for-each>元素内部,但是你也可以为一个目标模板提供一个唯一的节点名字,并且使用<xsl:apply-template>元素来应用于一些具体的节点。但是,"为每一个"建造, 是完全反复并且在特定的情形里更有意义的,在这些特定的情况下,在一份文档或者结果树里的全部节点无论如何都需要被处理。 你将发现这种方法的例子,有人在Michael Kay的XSLT 程序员参考里完全地详细说明。他也解释一种灵巧的技术,该技术描述了在一个<xsl:variable>元素里面调用<xsl:call-template>的方法。在<xsl:variable>元素里,一个简单的从结果树到字符行为的转换就好像<xsl:call-template>元素正从它的调用中返回的一个结果。  如果cite属性的值是Horn79,那么变量cite-in-brackets 的结果值为 [Horn79 ].

  这类过程的结构可能被如下的方式说明, 在下面已给在方括号内的装入的字符值的模版在一个变量元素内被调用。

<!-- start with template definition, proceed to variable
     element -->
<xsl:template name="bracketit">
  <xsl:param name="string" />
  <xsl:value-of select="concat("'[', $string, ']')"/>
</xsl:template>

<xsl:variable name="cite-in-brackets">
  <xsl:call-template name="bracketit"/>
    <xsl:with-param name="string" select="@cite"/>
  </xsl:call-template>
</xsl:variable>

 

  使用递推处理项目列表

  XSLT没有像使用在传统的编程语言里的用来处理具体的计数行为的计数器一样的自动增加的变量,也不支持传统语言中的有条件的循环结构,例如while, for, 或者until 。 但是XSLT确实支持递推,提供一种方便的方法达到相同的目的。这个过程的这种方法导致了递归函数调用的建立, 这里功能接连不断被用于在一个列表中的第一个节点或者一个字符串里面的第一个非空节点, 并且功能也被适用于列表节点或者字符串的剩余部分——即在带有第一个要素或者字符顺序从它的内容除去后剩下的部分。 对每种类型的数据来说,处理会一直进行,直到列表或者字符串是空的的时候,即当不再有节点出现或者非空的字符存在在剩余的部分的时候。在他的书名为Mastering XSLT 的Sybex书中,Chuck White 指出XSLT 该方法是"重复每一个命名了的表达式的实例的结果片段。"

  管理有条件处理

  <xsl:choose> 和<xsl:when> 元素允许可能需要多个选择的条件转移;一个<xsl:otherwise>元素甚至允许明确处理那些没有通过确定的具体的测试的项目。 那些基本句法提供一个看起来很象典型的具有特定的嵌套的if-then-else语句的构造结构。White清楚地说明了下面的这些在Mastering XSLT的语句在去除了实际的赋值或者限制之后的基本句法。

<xsl:choose>
  <xsl:when test="expression">
     <!-- processing statements -->
  </xsl:when>
  <xsl:otherwise>
     <!-- processing statements -->
  </xsl:otherwise>
</xsl:choose>

  鉴于XSLT 如此容易支持的各种各样的技术,这使得你可以相当容易的构建你自己的处理在遍历,递推和有条件的测试技术方面的例子的文档。 你也能再访XSLT的指导,来获得更多的插图和例子,或者也可以翻阅更精心制作和冗长的例子的Sal Mangano的XSLT Cookbook (O'Reilly, 2003),那些例子你都能直接的在你的应用中轻松的导入和选择。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章