我想实现
声明具有否值
的全局变量 <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的预期输出值。如果不可能那么实现此目的的另一种方法是什么?我应该使用什么而不是变量?
答案 0 :(得分:0)
“这不是一个错误,它是一个功能”:XSLT变量的设计是不可更改的。实际上它们可以被命名为常量。解决这个问题很困难,可以使用参数来完成。在大多数情况下,如果您使用XSLT编程尝试,则不需要,其中程序由数据通过模板驱动。
你的问题的答案是否定的
从XML and Variables
<?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,您可以将函数传递给脚本。我在这里描述了这种技术:Can PHP communicate with XSLT? xslt规范说:
XSLT不提供Java赋值运算符的等价物
x =“值”;
因为这会使创建一个以批处理方式处理文档的实现变得更加困难,从开始开始直到结束。
(请参阅http://www.w3.org/TR/xslt#variables以证明我的回答“否”,你的问题是正确的: - )