我们可以声明全局变量并从中添加/删除/检查值吗?

时间:2014-02-17 07:17:57

标签: xslt-1.0

我想实现

声明具有

的全局变量
 <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的预期输出值。如果不可能那么实现此目的的另一种方法是什么?我应该使用什么而不是变量?

1 个答案:

答案 0 :(得分:0)

“这不是一个错误,它是一个功能”:XSLT变量的设计是不可更改的。实际上它们可以被命名为常量。解决这个问题很困难,可以使用参数来完成。在大多数情况下,如果您使用XSLT编程尝试,则不需要,其中程序由数据通过模板驱动。
你的问题的答案是否定的 从XML and 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,您可以将函数传递给脚本。我在这里描述了这种技术:Can PHP communicate with XSLT?

xslt规范说:
XSLT不提供Java赋值运算符的等价物 x =“值”;
因为这会使创建一个以批处理方式处理文档的实现变得更加困难,从开始开始直到结束。
(请参阅http://www.w3.org/TR/xslt#variables以证明我的回答“否”,你的问题是正确的: - )