Xml 我需要一个黑客使xslt允许我们为变量设置新值

Xml 我需要一个黑客使xslt允许我们为变量设置新值,xml,xslt,Xml,Xslt,我读过,与编程语言不同,XSLT不允许我们为变量设置新值。我只是想知道有没有什么黑客可以绕过人们使用的这个限制?因为具有重置变量值的能力在AIK中是非常有用的 至少如果我们可以重置一个变量的值,我可以在这里解决我的问题:在XSLT中,您有常量,而不是变量。不知道他们为什么称之为变量。它们没有变化。它们是恒定的。我所知道的唯一一个技巧就是让你的头脑去理解XSLT。不是最好的解决办法,我知道……但那是XSLT。 < P> XSLT变量必须在传统的数学意义上进行,而不是程序语言的常识,如C++ + <

我读过,与编程语言不同,XSLT不允许我们为变量设置新值。我只是想知道有没有什么黑客可以绕过人们使用的这个限制?因为具有重置变量值的能力在AIK中是非常有用的


至少如果我们可以重置一个变量的值,我可以在这里解决我的问题:

在XSLT中,您有常量,而不是变量。不知道他们为什么称之为变量。它们没有变化。它们是恒定的。我所知道的唯一一个技巧就是让你的头脑去理解XSLT。不是最好的解决办法,我知道……但那是XSLT。

< P> XSLT变量必须在传统的数学意义上进行,而不是程序语言的常识,如C++ + < /P>。 XSLT不允许我们为变量设置新值

实际上并非如此,因为变量的作用域是包含在XSLT元素中的

因此,如果将变量定义为
xsl:stylesheet
的子变量,则必须将其视为全局常量

但是,如果您将变量定义为
xsl:template
的子变量,而您必须仅在模板的当前上下文中将变量视为局部常量,那么在转换的范围内,您可以将其视为一个变量,它可以根据模板上下文采用不同的值。这同样适用于命名模板或函数

有没有什么黑客可以绕过这个限制

只是习惯于以一种实用的方式与他们合作


摘要示例:

如果将变量定义为
xsl:stylesheet
的子变量,以便它们根据转换参数获取值,则可以将该变量视为转换范围内的变量

因此,考虑将参数作为函数的样式表:

F(x)
以及带有变量的模板,作为
F(x)
中的子函数,例如:

T(y)
这样你就可以得到摘要:

F(x) = G( T(y), x )
您还可以拥有,例如:

F(x) = G( T(y(x)), x )
取决于您如何设计样式表

我读过,不像编程 语言,XSLT不允许我们 为变量设置一个新值

这里有两个不正确的陈述

  • “与编程语言不同,XSLT”。XSLT是一种编程语言。它是一组被称为函数式编程语言的编程语言中的一员。与您试图表达的内容最接近的正确语句是:“与程序性编程语言不同”

  • “XSLT不允许我们为一个变量设置一个新的值”。同样不正确——不是XSLT不允许某些东西——它是任何函数式编程语言,而XSLT是函数式编程语言

  • 我只是想知道有没有黑客 为了绕过这个限制 人们在使用什么

    没有黑客,因为人们不需要这样的黑客。没有能力改变变量值就无法生存的人,只需使用过程编程语言

    因为有 能够重置 变量本身就是有用的

    事实上,拥有这种能力在大多数情况下都是有害的。这使得理解程序和/或用程序正确性验证器证明程序正确性变得更加困难。任何有副作用的程序也更难优化,任何这样的程序都可能不如同样解决问题的不变代码优化问题

    知道这一点很好:众所周知,任何可以用过程语言解决的程序也可以用函数语言解决。因此,不需要可变变量——甚至没有一个问题不能用函数方法解决。你认为这个问题在函数式语言中是无法解决的这种方法并不能真正解决这个问题——只要问问其他人,他们就会给你一个简洁的解决方案——通常比程序解决方案短得多,优雅得多

    纯XSLT可以做的一个很好的例子是库。FXSL提供了一组用于解决大型问题的函数/模板,其中包括相当复杂的函数/模板,例如查找任何幂(
    x^y
    )或对数,或基本三角函数,或求解任何方程
    f(x)=0

    FXSL功能的其他示例在文本处理领域——单词标记化、拼写检查、一致性构建等

    使用FXSL函数实现更复杂的任务:通用LR-1解析器、JSON和XPath 2.0解析器、随机数序列生成、数值积分和微分等


    所有这一切都是在不更改任何变量的情况下完成的——没有一点被“XSLT不允许这样做”这一事实所阻碍“:)

    我通常尽可能避免变量的副作用。有一个具体的例子吗?假设XSLT与其他过程语言一样工作,这是一个错误。它可以被扭曲,看起来有点像是程序性的,但本质上不是。这是一种函数式语言,可变变量会使调试(和实现)变得非常困难。我相信SO上的XSL杰出人士(Dimitre、Michael Kay和其他人)可以更好地解释这一点,这就是为什么这是一个注释而不是答案。如果您描述了您试图解决的问题,我们可以帮助您学习如何按预期的方式使用XSLT…+1,我真的很喜欢这个问题。当Dijkstra介绍goto-less编程时,我们中的一些人都在场,很多正在练习的程序员抱怨说goto语句真的很有用。那么,就像现在一样,投诉的答案是:给我们看看你的问题,我们就会给你看