2010-05-17 90 views
3

我要做到以下几点:如何改进XSL中的变量覆盖/覆盖?

  1. 声明一个变量
  2. 进入一个if语句
  3. 覆盖变量

XSL说,我不能一个变量声明两次,那么我能做些什么来改善这一步?

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

+5

这不是你想要做什么的描述 - 它是你想怎么做一个说明。 (而且这种情况不会发生。) 描述你想要做什么。 – 2010-05-17 22:12:19

+0

它并不总是“什么”的问题。我的问题包含许多编程语言的一个通用过程(设置一个变量并重置一个变量)。所以我只是问你是怎么做到的。希望你能接受这种对XSL使用中新手的人的想法。 – ChrisBenyamin 2010-05-18 09:50:44

+1

这总是一个“你想做什么”的问题。即使在常规编程语言中,仅设置/重置变量也是达到目的的一种手段。由于在XSLT中重新分配变量是不可能的,所以知道你实际正在尝试做什么是至关重要的。否则,您可能会收到的任何提示将始终模糊不清。 – Tomalak 2010-05-18 14:21:20

回答

5

如果你已经提到了你认为你需要“重写变量”的示例代码,那么任何像Tomalak,Dimitre这样的专家会建议你一个更好的(替代)选项/建议。

好吧。如果它只是你的问题(比如如何处理变量不能变化的语言!!! ??),那么我敢打赌你会在练习时得到澄清..

当我开始使用XSLT作为一个初学者,即使我有同样的问题..但很快我意识到.. 我们不需要变量变化。 ;);)

我觉得它的我愿意和XSLT工作。
你可以把你的模板处理函数和过程的方式。 (不精确)
你可以递归地调用它们..
你可以想象的数据操纵的程度,可以通过其中一种方式实现..(可能并不容易,但不是不可能,至少)


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


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

在另一方面..可以发送的表达。[like translate(., abc, ABC)]作为参数(帕拉姆)到其他模板..或可以直接写成输出.. !!以避免变量变化。 :))

+0

对模糊问题的好解答+1 – 2010-06-04 20:12:17

+0

@Dimitre,谢谢: )我很高兴收到你的赞美。 – 2010-06-05 10:59:42

2

正如你已经发现,在XSLT标准要求following

有约束力的阴影,如果 结合发生在一个点的另一个结合,其中 其他结合是可见的,而 绑定具有相同名称。这是一个错误 如果结合由 XSL成立:变量或XSL:一个模板内param元素 遮盖另一个 结合由一个xsl成立:可变 或XSL:param元素也是 模板内。如果由模板 中的xsl:变量 或xsl:param元素建立的 绑定映射另一个由 xsl:variable或xsl:param顶层 元素建立的绑定,则不是错误。

这里的解决方案取决于你真正想做什么。

  • 如果您希望变量承担整个模板单个值,但是你想要的值取决于一个条件,把一个<的xsl:如果>,或者更可能的是,<的xsl:选择>可变>元素
  • 如果您希望变量仅在< XSL采取不同的价值:在< XSL内如果>块,然后要么
    • 使用不同的变量名或
    • 把< xsl:呼叫模板>里面的< xsl:if >并在被调用的模板中再次定义该变量。
+1

@Dimitre:放松一下。大多数人没有真正理解功能语言和程序语言之间的差异。对于某人来说,“开始思考像一个功能性程序员”是他最“困难”的一种功能语言。是的,这是一个常见的错误。这就是为什么我更愿意告诉他如何改变他的想法,而不是因为他没有正确的思考而谴责他。 – 2010-05-19 03:58:15

+0

梅内斯对不起,我将我的评论移至问题 - 它属于哪里。 :( 至于你的回复,我很佩服你的耐心,仍然怀疑这对OP有用 - 显然,他需要数月的练习 – 2010-05-19 05:04:17