XSLT 2.0如何跨各种循环和结构执行计数器和变量

时间:2010-07-22 17:45:04

标签: mutable xslt-2.0

所以,我知道你不能访问范围之外的变量,它们是不可变的,XSLT功能不是必需的等等......

但我需要一种通用的方法来处理那些对全局可变变量来说微不足道的事情(这听起来很邪恶只是说:)。这是一个例子......

<xsl:template match="t1">
  <xsl:if test="someLogic">
    <!-- I know, can't do this but just to explain... -->
    <xsl:variable name="varName">numberOrText, maybe even some arithmetic like $varName+1</xsl:variable>
  </xsl:if>
</xsl:template>

<xsl:template match="t2">
  <xsl:value-of select="$varName"/>
</xsl:template>

挑战是在处理期间可以有任意数量的模板,如t1和t2,以及修改和使用变量的模板。

问题的一部分可能是价值取决于处理顺序,但这是故意的 - 这就是所需要的。

我想到的一种可能性是将值作为参数传递到处。但问题是一个叶子模板可能需要更改它,然后处理恢复...它失去了这种变化。除非有一些方法让模板返回参数,然后我可以传递这些返回的参数?想到一个通用的纯函数式编程语言,似乎就是人们可以这样做 - 递归调用,但是使用返回值进行进一步的调用,这样就可以“继承”这些值。

我已经看到这样做使用扩展 - 调用Java方法或类似的东西然后你可以拥有全局可变值,但是......我真的不会像那样“欺骗”。

任何指针,想法等,欢迎。

1 个答案:

答案 0 :(得分:0)

我认为答案包含在我的问题和其他评论中。这里引用了一些内容:

“某种方式让模板返回参数然后我可以传递那些返回的参数?想到一个通用的纯函数式编程语言,看起来就是人们如何做到这一点 - 递归调用,但使用返回进一步调用的值,这样就可以“结转”这些值。“

来自user357812:“我认为这可能是通过最细粒度的树遍历模式和隧道参数完成的。只有输入和输出才能确切地说明如何。”