我有这个xslt:
<xsl:param name="total_articles" select="3" />
<xsl:param name="articles_per_page" select="3" />
<xsl:apply-templates select="dagboek/entry[position > $offset][position < $articles_per_page+$offset]" >
<xsl:with-param name="total_pages" tunnel="yes">
<xsl:choose>
<xsl:when test="$value="2005-09" and $page="1">8</xsl:when>
<xsl:otherwise>floor(number($total_articles)-1) div $articles_per_page +1</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:apply-templates>
但现在我收到了这个错误。
如何计算计算结果并将其放入param total_pages中。
鲁洛夫
编辑1:我尝试实现的目标是,如果它不是2005-09且页面不是1,那么总页数是从total_articles
和articles_per_page
计算出来的。结果必须放在参数页面中。
答案 0 :(得分:1)
<xsl:when test="$value="2005-09" and $page="1">8</xsl:when>
这甚至不是格式良好的XML文档。问题在于嵌套引号。
可能意味着:
<xsl:when test="$value='2005-09' and $page='1' ">8</xsl:when>
另一个可能的问题:隧道参数仅在XSLT 2.0中可用。你似乎在使用XSLT 1.0
<强>更新强>:
评论中的OP修改/澄清了他的初步问题:
我试图实现的是,如果它不是2005-09而且页面不是1 那么总页数是从total_articles和 articles_per_page。结果必须放在参数页面中。
这可以简单地表达为:
<xsl:with-param name="total_pages" select=
"8*($value='2005-09' and $page='1')
+
(floor(number($total_articles)-1) div $articles_per_page +1)
*
not($value='2005-09' and $page='1')
"/>
<强>解释强>:
我们使用的事实是,如果number($someBoolean)
为1
,则$someBoolean
定义为true()
,0
$someBoolean
为false()
是 if($vCond)
then $vNum1
else $vNum2
。
因此伪代码:
$vNum1*$vCond + $vNum2*not($vCond )
可以用单个XPath表达式表示:
$vCond
只要布尔值是算术运算符的参数,它就会自动转换为数字。
所以,这是在运行时发生的事情:
假设true()
为not($vCond)
,因此false()
为$vCond
。
由于not($vCond)
和*
是1
运算符的参数,因此它们分别转换为数字0
和$vNum1*1 + $vNum2*0
:
...
$vNum1*1
...
$vCond1
注意:
上述等价规则可以进一步推广到N 互斥条件$vCond2
,$vCondN
,...,$val1
和相应的N值: $val2
,$valN
,...,$val1*$vCond1 + $val2*$vCond2 + ... + $valN*$vCondN
:
$valK
当k
为{1,..., N}
时,等于$vCondK
(true()
中的{{1}})
答案 1 :(得分:0)
您的格式错误:
<xsl:when test="$value="2005-09" and $page="1">8</xsl:when>
应该看起来像:
<xsl:when test="$value='2005-09' and $page='1'">8</xsl:when>
答案 2 :(得分:0)
这是这条线吗?
<xsl:when test="$value="2005-09" and $page="1">8</xsl:when>
你正在嵌套双引号 - 这不会起作用。使用单引号和双引号的组合:
<xsl:when test='$value="2005-09" and $page=1'>8</xsl:when>