急:请问如何在xsl中使用变量???
我需要在xsl中设置一个变量,在xml每次调用xsl时不断累加,并在xsl中利用变量的值处理不同结果?请问有那位高手可以解决,请不吝赐教! 问题点数:0、回复次数:7Top
1 楼saucer(思归)回复于 2004-08-03 05:25:22 得分 0
cannot, xsl:variable is immutable, if you are using MSXML, you can look into msxsl:script to keep the value or if you can call a recursive template to pass values around
show your xml and tell us what you wantTop
2 楼net_lover(【孟子E章】)回复于 2004-08-03 07:12:30 得分 0
http://dotnet.aspx.cc/ShowDetail.aspx?id=4052DA03-51E0-464B-8418-3C1354920F8FTop
3 楼qhyan23(yan)回复于 2004-08-03 07:30:18 得分 0
回答问题的都是5 个星的呀!真是厉害呀!Top
4 楼tttk(网络芝麻)回复于 2004-08-03 08:43:48 得分 0
xslt中的变量是只读变量,无法象其它编程语言中一样进行赋值处理。但是可以采用一些变通的方法,那就是利用xslt中的递归。孟子e章提供的就是这个思路。
另外,xslt中的变量是无状态变量,无法保存上一次调用的内容,每次在刷新时,结果将重新初始化。Top
5 楼zzzz76(伽菲猫)回复于 2004-08-03 09:38:06 得分 0
恩,以前写xsl的时候,发现变量实际上是常量似的,无法更改,用递归可以实现。
或者你自己写个扩展函数吧,嘻嘻Top
6 楼yyasp(大胡子)回复于 2004-08-03 12:02:55 得分 0
我现在得到一段XML数据,我需要根据这个数据生成一个横向展示的菜单程序
menu.asp:
<% dim sXml,sXsl,XmlDoc,XslDoc
sXml = "front\public\menu\menustest.xml"
sXsl = "front\public\menu\menustest.xsl"
set XmlDoc = Server.CreateObject("MICROSOFT.XMLDOM")
set XslDoc = Server.CreateObject("MICROSOFT.XMLDOM")
XmlDoc.async = false
XslDoc.async = false
if session("FMenu")="" then Response.Redirect GPathtoTop & "default.asp"
session("FMenu")=session("FMenu")
XmlDoc.loadXML(session("FMenu"))
XmlDoc.load(Server.MapPath(GPathtoTop & sXml))
XmlDoc.documentElement.setAttribute "ROOT" ,GPathtoTop
XmlDoc.documentElement.setAttribute "ImgPath" ,GPathtoTop & "front/images/menu/"
XslDoc.load(Server.MapPath(GPathtoTop & sXsl))
%>
<script language="javascript">
//....一些脚本的函数,展示菜单
//需要形成下面一段,关键是三级菜单的时候msub的编号必须从一开始有次序递增
/*
mpmenu5=new mMenu('教育论文','/Lunwen/','self','','','','');
mpmenu5.addItem(new mMenuItem(' 学科教学','/Lunwen/Index.Asp?CateID=1','self',false,'学科教学',null,'','','',''));
mpmenu5.addItem(new mMenuItem(' 教学管理','/Lunwen/Index.Asp?CateID=2','self',false,'教学管理',null,'','','',''));
mpmenu5.addItem(new mMenuItem(' 探索研究','/Lunwen/Index.Asp?CateID=3','self',false,'探索研究',null,'','','',''));
mpmenu5.addItem(new mMenuItem(' 名校名师','/Lunwen/Index.Asp?CateID=4','self',false,'名校名师',null,'','','',''));
mpmenu5.addItem(new mMenuItem(null,null,null,true));
mpmenu5.addItem(new mMenuItem(' 阅读排行','/Lunwen/Index.asp?order=hits&updown=desc','self',false,'文章阅读排行榜',null,'','','',''));
mpmenu6=new mMenu('精彩论坛','/bbs/','self','','','','');
msub1=new mMenuItem(' ≡日常事务≡','','self',false,'','1','','','','');
msub1.addsubItem(new mMenuItem(' 站务论坛','/bbs/list.asp?boardid=1','self',false,'关于本站的日常或其他事务的讨论区',null,'','','',''));
msub1.addsubItem(new mMenuItem(' FTP和会员服务区','/bbs/list.asp?boardid=2','self',false,'本站FTP的使用以及会员们讨论论坛建设的好地方',null,'','','',''));
msub1.addsubItem(new mMenuItem(' 需求与补档','/bbs/list.asp?boardid=17','self',false,'大家需要什么都在这里发贴,其他版面不允许发布此类帖子,违者删贴。',null,'','','',''));
mpmenu6.addItem(msub1);
mpmenu6.addItem(new mMenuItem(null,null,null,true));
msub2=new mMenuItem(' ≡软件交流≡','','self',false,'','1','','','','');
msub2.addsubItem(new mMenuItem(' 软件讨论中心','/bbs/list.asp?boardid=3','self',false,'这里是软件交流天地,我要最新的软件,我要最好的注册...',null,'','','',''));
msub2.addsubItem(new mMenuItem(' 操作系统论坛','/bbs/list.asp?boardid=4','self',false,'各种操作系统的最新消息、使用心得体会交流。',null,'','','',''));
msub2.addsubItem(new mMenuItem(' 影音无极限','/bbs/list.asp?boardid=5','self',false,'这里提供最新最清晰的DivX 这里发布最劲最High的音乐 想把握最新的娱乐动态?尽在动感!',null,'','','',''));
msub2.addsubItem(new mMenuItem(' 游民家园','/bbs/list.asp?boardid=6','self',false,'游民家园',null,'','','',''));
mpmenu6.addItem(msub2);
mpmenu6.addItem(new mMenuItem(null,null,null,true));
msub3=new mMenuItem(' ≡技术交流≡','','self',false,'','1','','','','');
msub3.addsubItem(new mMenuItem(' 菜鸟天堂','/bbs/list.asp?boardid=7','self',false,'讨论网络技术,关注网络安全。网络的加油站。',null,'','','',''));
msub3.addsubItem(new mMenuItem(' 网络技术和安全','/bbs/list.asp?boardid=8','self',false,'讨论网络技术,关注网络安全。网络的加油站。',null,'','','',''));
msub3.addsubItem(new mMenuItem(' 编程爱好者论坛','/bbs/list.asp?boardid=9','self',false,'各种编程语言、多媒体知识的交流园地',null,'','','',''));
msub3.addsubItem(new mMenuItem(' 硬件讨论区','/bbs/list.asp?boardid=10','self',false,'讨论有关计算机硬件的论坛。',null,'','','',''));
msub3.addsubItem(new mMenuItem(' 新硬件大看台','/bbs/list.asp?boardid=15','self',false,',新,精——只介绍讨论最新最酷的硬件产品',null,'','','',''));
mpmenu6.addItem(msub3);
mpmenu6.addItem(new mMenuItem(null,null,null,true));
...
*/
<%Response.Write(XmlDoc.transformNode(XslDoc))%>
</script>
Top
7 楼yyasp(大胡子)回复于 2004-08-03 12:03:07 得分 0
测试xml:
<?xml version="1.0" encoding="gb2312"?>
<?xml:stylesheet type="text/xsl" ?>
<Treeroot ROOT="../../" ImgPath="../../front/images/menu/">
<Tree PID="1" ID="38" Title="个人事务" RunWin="1" HelpFile="public/help/notepad/personindex.asp" URL="">
<Tree PID="2" ID="39" Title="通讯录" RunWin="1" HelpFile="public/help/addressBook/index.asp" URL="Front/addressBook/index.asp"/><Tree PID="2" ID="40" Title="个人记事本" RunWin="1" HelpFile="public/help/notepad/index.asp" URL="Front/NotePad/NotePad.asp"/>
<Tree PID="2" ID="41" Title="邮件中心" RunWin="1" HelpFile="" URL="Front/mailcenter/mail.asp"/>
</Tree>
<UMroot><UM UMTitle="工作总结" UMURL="Front/Routine/default.asp?pageflag=4" UMRunWin="1"/></UMroot>
</Treeroot>
xsl:
原来生成纵向菜单的程序
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet language="VBScript" xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:script language="VBScript">
Function getURL(root)
getURL = root.getAttribute("HTTPURL")
End Function
</xsl:script>
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="/Treeroot">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Tree[Tree]">
<tr><td style="cursor:'hand';" colspan="2" onClick="clickMenu(this)">
<xsl:attribute name="PID"><xsl:value-of select="@PID" /></xsl:attribute>
<xsl:choose>
<xsl:when test="@PID[.='1']">
<xsl:attribute name="bgcolor">#CCCCCC</xsl:attribute>
<xsl:attribute name="onMouseOver">mOvr(this,'#ffff66')</xsl:attribute>
<xsl:attribute name="onMouseOut">mOut(this,'#cccccc')</xsl:attribute>
</xsl:when>
<xsl:when test="@PID[.='2']">
<xsl:attribute name="bgcolor">#F0F0E1</xsl:attribute>
<xsl:attribute name="onMouseOver">mOvr(this,'#ffff66')</xsl:attribute>
<xsl:attribute name="onMouseOut">mOut(this,'#F0F0E1')</xsl:attribute>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
<img id="imgopen" hspace="2" vspace="0">
<xsl:attribute name="src"><xsl:value-of select="//Treeroot/@ImgPath" />close.gif</xsl:attribute>
</img>
<A>
<xsl:if test="@URL[.!='']">
<xsl:attribute name="HREF"><xsl:value-of select="//Treeroot/@ROOT" /><xsl:value-of select="@URL" /></xsl:attribute>
</xsl:if>
<xsl:choose>
<xsl:when test="@RunWin[.='0']">
<xsl:attribute name="target">main</xsl:attribute>
</xsl:when>
<xsl:when test="@RunWin[.='1']">
<xsl:attribute name="target">_top</xsl:attribute>
</xsl:when>
<xsl:when test="@RunWin[.='2']">
<xsl:attribute name="target">new</xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:value-of select="@Title" />
</A>
</td></tr>
<tr><td open="1" style="Display:none" colspan="2">
<xsl:attribute name="PDID"><xsl:value-of select="@PID" /></xsl:attribute>
<table width="80" border="0" cellspacing="0" cellpadding="0" align="center">
<xsl:apply-templates />
</table>
</td></tr>
</xsl:template>
<xsl:template match="Tree[not(Tree)]">
<tr><td id="item1" style="cursor:'hand';" colspan="2">
<xsl:choose>
<xsl:when test="@PID[.='1']">
<xsl:attribute name="bgcolor">#CCCCCC</xsl:attribute>
<xsl:attribute name="onMouseOver">mOvr(this,'#ffff66')</xsl:attribute>
<xsl:attribute name="onMouseOut">mOut(this,'#cccccc')</xsl:attribute>
</xsl:when>
<xsl:when test="@PID[.='2']">
<xsl:attribute name="bgcolor">#F0F0E1</xsl:attribute>
<xsl:attribute name="onMouseOver">mOvr(this,'#ffff66')</xsl:attribute>
<xsl:attribute name="onMouseOut">mOut(this,'#F0F0E1')</xsl:attribute>
</xsl:when>
<xsl:when test="@PID[.='3']">
<xsl:attribute name="bgcolor">#ffffff</xsl:attribute>
<xsl:attribute name="onMouseOver">mOvr(this,'#ccffcc')</xsl:attribute>
<xsl:attribute name="onMouseOut">mOut(this,'#ffffff')</xsl:attribute>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
<img id="img1" hspace="1">
<xsl:attribute name="src"><xsl:value-of select="//Treeroot/@ImgPath" />item.gif</xsl:attribute>
</img>
<A>
<xsl:choose>
<xsl:when test="@HTTPURL[.!='']">
<xsl:attribute name="HREF"><xsl:eval>getURL(me)</xsl:eval></xsl:attribute>
</xsl:when>
<xsl:when test="@URL[.!='']">
<xsl:attribute name="HREF"><xsl:value-of select="//Treeroot/@ROOT" /><xsl:value-of select="@URL" /></xsl:attribute>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="@RunWin[.='0']">
<xsl:attribute name="target">main</xsl:attribute>
</xsl:when>
<xsl:when test="@RunWin[.='1']">
<xsl:attribute name="target">_top</xsl:attribute>
</xsl:when>
<xsl:when test="@RunWin[.='2']">
<xsl:attribute name="target">new</xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:value-of select="@Title" />
</A>
</td></tr>
<xsl:if test="@PID[.='1']">
<tr><td colspan="2"></td></tr>
</xsl:if>
</xsl:template>
<xsl:template match="/Tree">
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
我现在修改的XSL用
xmlns:xsl="http://www.w3.org/TR/WD-xsl"声明的话,不支持 <xsl:variable,等一些属性,三级菜单不能实现,我如果用xmlns:xsl="http://www.w3.org/1999/XSL/Transform声明,用 MSXML写SCRIPT函数不报错,但是ASP程序中打出来的代码确只有一行:
<?xml version="1.0" encoding="utf-16"?>
Top




