我想实现
声明具有无值的全局变量
<xsl:variable name="IsEqual"/>
检查可变值并根据条件进行更改
<xsl:choose>
**// Checking value equal or not**
<xsl:when test="name=$name">
<xsl:choose>
**//Checking variable value**
<xsl:when test="$IsEqual !='Unequal'">
**//Setting variable value**
<xsl:variable name="IsEqual" Select="Equal"/>
</xsl:when>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
**//Setting variable value**
<xsl:variable name="IsEqual" Select="Unequal"/>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="$IsEqual"/>
变量$IsEqual的预期输出值。。如果不可能,那么实现这一目标的另一种方法是什么?我应该使用什么来代替变量
"这不是一个bug,而是一个特性":XSLT变量被设计为不可变的。实际上,它们可以被命名为常量。解决这个问题很困难,可以使用参数来完成。在大多数情况下,如果您使用XSLT编程尝试,那么这是不必要的,因为程序是由数据通过模板驱动的
问题的答案是否定的。
从XML和Variables 复制了此(自己的)文本
@Sam:使用全局变量你想实现什么?你想在哪里检查平等?我不知道你想做什么,所以我只能给你举一个一般的例子
尝试这个xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<root>
<data check="value1">This is data 1</data>
<data check="value2">This is data 2</data>
<data check="value3">This is data 3</data>
</root>
使用这个xslt文件:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="v">value2</xsl:variable>
<xsl:template match="/">
<xsl:apply-templates select="root/data[@check = $v]"/>
</xsl:template>
<xsl:template match="data">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
只有第二个数据元素会显示出来,因为这个元素与全局变量匹配,全局变量始终保持不变。如果希望匹配不同的值,可以将它们放入数据文件中,而不是使用变量并比较不同的元素
对于测试,只需将两个文件(test.xml和test.xsl)保存到一个目录中,然后用浏览器打开test.xml。
@Sam:当你坚持要更改xslt变量时,我不得不重申这是不可能的。也许有一种方法可以绕过xslt运行的环境。例如,PHP,在那里你可以将函数传递到脚本中。我在这里描述了技术:PHP可以与XSLT通信吗?
xslt规范指出:
xslt不提供与Java赋值运算符等效的运算符
x="value">
因为这会使创建一个处理文档的实现变得更加困难,而不是像批处理一样,从头开始,一直持续到最后
(请参阅http://www.w3.org/TR/xslt#variables为了证明我对你的问题的回答"不"是正确的:-)