如何在XSL中改进变量覆盖/覆盖?

时间:2010-05-17 21:53:25

标签: xml xslt

我想做以下事情:

  1. 声明变量
  2. 进入if语句
  3. 覆盖变量
  4. XSL说我不能两次声明变量,那么我该怎么做才能改进这一步呢?

    另一种方法是检查是否设置了变量。我这样做了,因为我跳过了第一步并在if语句中声明了变量。在另一个if语句中,我想检查变量是否存在。

3 个答案:

答案 0 :(得分:5)

如果您提到了您认为需要“覆盖变量”的示例代码,那么任何像Tomalak,Dimitre这样的专家都会向您建议更好的(替代)选项/建议。

好。如果它只是你的问题(就像人们如何处理变量无法改变的语言那样!!! ??)那么我打赌你会在练习时得到澄清......

当我作为初学者使用XSLT开始我的运营商时,即使我有同样的问题......但很快我就意识到了...... 我们不需要变量来改变。 ;);)

我觉得很高兴与XSLT合作 您可以按照处理函数和过程的方式处理模板。 (不精确)
你可以递归地调用它们。
你可以想象的数据操作程度,可以通过一种或另一种方式实现..(可能并不容易,但并非不可能至少)..

回到你的问题,如果你真的需要改变变量的值..那么随意定义一个新的变量..!?使用数学运算符,内置函数等对前一个变量的值,而不是分配回同一个变量..将其分配给一个新的..并根据需要使用它。

这可能不是有效的技术,但可以是步骤1.

另一方面..你可以将表达式.. [like translate(., abc, ABC)]作为参数(Param)发送到其他模板..或者可以直接写为输出.. !!以免变量变化。 :))

答案 1 :(得分:2)

正如您所发现的,xslt标准需要following

  

绑定会影响另一个绑定   绑定发生在一个点   另一个绑定是可见的,而且   绑定具有相同的名称。它是一个   如果绑定建立的错误   xsl:variable或xsl:param元素   在模板内阴影另一个   由xsl:variable建立的绑定   或xsl:param元素也在   模板。如果a不是错误   由xsl:variable建立的绑定   或模板中的xsl:param元素   阴影另一个绑定建立   一个xsl:variable或xsl:param顶级   元件。

这里的解决方案取决于你真正想做的事情。

  • 如果您希望变量为整个模板采用单个值,但您希望该值依赖于条件,请输入< xsl:if>或者,更有可能的是< xsl:choose>在< xsl:variable>内元件
  • 如果您希望变量仅在< xsl:if>内使用不同的值阻止,然后
    • 使用其他变量名称或
    • 放一个< xsl:call-template>在< xsl:if>内并在被调用的模板中再次定义变量。

答案 2 :(得分:1)