+ -
当前位置:首页 → 问答吧 → xsl param 声明后,如何赋值

xsl param 声明后,如何赋值

时间:2008-03-28

来源:互联网

设置了一个全局的param,在声明的时候马上赋值我是知道的,但是声明后想赋值,XSL的语句怎么写

作者: zhouyongqi   发布时间: 2008-03-28

<xsl:param name="xxx" select="//xxx[@xxx=xx]"/>
<xsl:param name="xxx">
  <xsl:value-of select="/xxxx"/>
</xsl:param>
<xsl:param name="xxx">1234</xsl:param>

顶级参数可从外部传入
Microsoft XML DOM的话
var xslProc = xslt.createProcessor();
xslProc.input = xmlDoc;
xslProc.addParameter("xxx", xxx);
xslProc.transform();

作者: hookee   发布时间: 2008-03-28

ls的方法不就是在声名的时候马上赋值嘛,如果声名以后再用<xsl:param name="xxx">1234</xsl:param>修改,会出错的

作者: zhouyongqi   发布时间: 2008-03-28

是指修改?
<xsl:param name="xx"/>
<xsl:apply-templates><xsl:with-param name="xx" select="456" /></xsl:apply-templates>
<xsl:apply-templates><xsl:with-param name="xx" select="123" /></xsl:apply-templates>

作者: hookee   发布时间: 2008-03-28

apply template with param的方法我知道的,但是通过这种方法实现不方便,不知道script能不能设置全局变量,保存状态

作者: zhouyongqi   发布时间: 2008-03-28

设置了一个全局的param,在声明的时候马上赋值我是知道的,但是声明后想赋值,XSL的语句怎么写
--
不行!
如果是全局param,你可以在运行XSLT的时候进行赋值,否则将使用XSLT里缺省的。但一旦进入,不能再进行赋值修改了。
你可以用其他的途径解决你的需求:
1. 用xsl:if进行判断,将结果再用一个xsl:variable包起来;
2. 虽然据我所知的XSLT处理器都不支持你的要求,也许你可以向你的供应商提这样的要求,如果你确实需要这样的话。

FT
--
Anything one man can imagine, other men can make real.

作者: firetoucher   发布时间: 2008-03-28

我把实际应用说一下,哪位大虾能帮我看看怎么解决:我最上层是<xsl:for-each>遍历整份XML文档,有一个节点片断是<start/>abc<end/>,节点start,end中间的文本外面要包一层,例如转成<content>abc</content>,一开始我想用标志位的,其他暂时想不到好的解析方法。

难点:1.内容在两个节点中间,如何取出来并分辨出不是普通的text
  2.如果是解析到<start/>后处理文字,怎么写XSL语句,并且上层for-each不重复解析abc,避免出现<content>abc</content>abc这样的情况出现

作者: zhouyongqi   发布时间: 2008-03-28

xsl:with-param

作者: javakiki   发布时间: 2008-04-03

都是很好的建议! 值得学习

作者: UltraBejing   发布时间: 2008-05-01

我也想了解,谢谢LZ.

作者: meiZiNick   发布时间: 2008-05-01

接分先!

作者: knowledge_Is_Life   发布时间: 2008-05-01

这也是 我现在遇到的问题!!!

作者: zhl71199713   发布时间: 2011-08-12