请诸位大侠指点一下,在XSL文件中怎么样定义或使用一个全局变量?

WLiu 2001-06-14 04:09:00
我们公司现在在用XML、XSL文件做系统的开发,我们将数据库选出来的记录存储在XML文件中,然后在XSL文件中定义文件的输出,我们是将所有的XML文件中的数据打印到控制台,也就是在MS-DOS的环境下输出,这个控制转换是用JAVA结合XSL、XML文件完成的。
但是我在工作碰到了这样的一个问题:在XSL文件中,我因为要控制报表的输出,所以要用到这样的一个情况,我在XSL文件中必须通过遍历XML文件中的数据来确定,XML文件的数据中有一个特定的字段值,这样我要打印相应的表头。我在XSL文件中,写了如下的一段程序:
<xsl:for-each select="SD_DEAL_TYP">
<xsl:choose>
<xsl:when test="./@DEAL_TYP = 'MBS'">
<xsl:variable name="A" select="0"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
SD_DEAL_TYP:是我的XML文件中的子表的名字;
DEAL_TYP:是子表中的其中一个字段。

我就是希望,如果在子表(SD_DEAL_TYP)中如果有记录的字段(DEAL_TYP)的值,存在'MBS'的值的时候,给一个变量“A”赋一个值,这样我可以在接下来的程序中做相应的处理。
但是我发现一个问题就是在循环中,我可以给变量赋值,但是一旦退出循环的时候,这个变量也就消失了,也就是我无法保持变量的值。
我想请教诸位大侠,在这里的<xsl:for-each>循环中,我要怎么做才能够给一个外部的变量赋值,或者是保持现在的这个变量<xsl:variable>的“A”的值,让它在退出循环以后还存在。希望能够帮我写出相应的程序。
请大家多多指点指点,谢谢了!
...全文
232 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sino_sky 2001-06-17
  • 打赏
  • 举报
回复
你可以在循环内进行处理,显示呀。
karma 2001-06-17
  • 打赏
  • 举报
回复
把你的XML文件挑选一段贴出来,并写出你希望的显示的样子(不是描述)
WLiu 2001-06-14
  • 打赏
  • 举报
回复
请教:karma(无为) 和 大家
在我的程序中,因为这样的记录可能是有几条或者是没有,所以我必须要根据这个来判断是不是要加上相应的表头。如果有一条这样的记录,它的子表中有一条记录中字段(DEAL_TYP)的值是'MBS',这时我要打印相应的这个表头一次,如果它的子表中有多个记录的字段(DEAL_TYP)的值是'MBS',我也是只打印一次相应的表头。如果不存在这样的子表的记录当然是不用打印了。所以,我选择了首先用<xsl:for-each select="SD_DEAL_TYP"(子表名)> 、<xsl:choose>和<xsl:when test="./@DEAL_TYP(字段的名称) = 'MBS'">,这三个命令来判断是否存在这样的记录,然后再想根据这个所输出的变量值,来做这个打印的判断值。
根据你所提供的消息来说,对于一个变量一旦赋值一次就不能再次赋值了,那么我还是有两个问题想要请教你一下,那么对于在循环中的情况来说,重复赋值也许是不可避免的,那么是否在XSL文件中存在着一个跳出循环的语句呢?这样我就可以控制只赋值一次,这个就可以解决了。
同时,我还有一个问题就是在实际的变量有两种赋值的形式。
第一种是你所说的这个: <xsl:variable name="whatever" select="whatever" />
第二种是:
<xsl:variable name="first20">
<xsl:choose>
<xsl:when test="$stringLength > 0 and $stringLength < 20">
<xsl:value-of select="substring(./@CTP_TYP_CDE,1,$stringLength)"/>
</xsl:when>
<xsl:when test="$stringLength > 20 or $stringLength = 20" >
<xsl:value-of select="substring(./@CTP_TYP_CDE,1,20)"/>
</xsl:when>
</xsl:choose>
</xsl:variable>
我知道我可以用你所说的办法在循环的外部申明一个变量(好象你的那种办法其实是已经给这个变量赋值了,而我希望是只是在循环外部申明,而在循环中才给它赋值),但是在循环的内部我该怎么样来修改这个变量的值呢,或者说是用什么样的语句来给它赋值,能不能请你告诉我。
同时,也请大家来帮我解决一下这个问题,多谢大家了!
karma 2001-06-14
  • 打赏
  • 举报
回复
全局变量就是在最外层定义
<xsl:variable name="whatever" select="whatever" />

使用的时候用$whatever,但记住,在一个SCOPE里,如果你设置了一个变量以及它的值后,你就不能再更改它的值,这是XSLT的规定

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧