我怎么能以最好的方式做到这一点

时间:2011-11-19 16:14:04

标签: xslt

我在xslt中有一个变量,它必须包含几个取决于页面的值。 我知道<xslt: variable>无法完成工作,因为变量无法更改。

xslt:param可以完成这项工作,我该如何动态更改价值?

鲁洛夫

编辑1:我试着解释我想要的东西。我有一个每月显示文章的网站。我真正喜欢的是一个脚本,我可以过滤文章,所以只有特定月份的文章显示在页面中。但我需要决定每页上显示多少篇文章。因此,显示的文章数量基于月份和显示的页面。

1 个答案:

答案 0 :(得分:0)

XSLT是一种函数式语言,除其他外,意味着xsl:variablexsl:param一旦指定就无法更改其值。

这并不妨碍在XSLT中表达解决任何问题的能力(XSLT是Turing-complete),只需要根据命令式编程范例改变思维。

一旦发布您的特定问题,许多读者将能够提供完整的XSLT解决方案。

以下是一个简单示例

我们在变量中“累积”所有想要的值,然后输出它:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:variable name="vOddsAccumulator">
  <xsl:apply-templates/>
 </xsl:variable>

 <xsl:template match="/">
  <xsl:value-of select="$vOddsAccumulator"/>
 </xsl:template>

 <xsl:template match="*/*"/>

 <xsl:template match="num[. mod 2 = 1]">
  <xsl:value-of select="concat(., ' ')"/>
 </xsl:template>
</xsl:stylesheet>

将此转换应用于以下XML文档

<nums>
  <num>01</num>
  <num>02</num>
  <num>03</num>
  <num>04</num>
  <num>05</num>
  <num>06</num>
  <num>07</num>
  <num>08</num>
  <num>09</num>
  <num>10</num>
</nums>

生成了想要的结果

01 03 05 07 09