在xsl:for-each范围内使用fn:floor()的结果

时间:2014-06-30 09:57:37

标签: xslt xslt-2.0 saxon

我正在使用XSLT 2.0(Saxon),并尝试使用floor()调用的结果作为<xsl:for-each>循环中范围的上限。

<xsl:for-each select="1 to floor(string-length($input_string) div 2)">...</xsl:for-each>

我收到错误消息:

  

XPTY0004:'to'的第二个操作数的必需项类型是xs:integer;   提供的值具有项目类型xs:decimal

我原以为floor()的结果类型是一个整数,但这似乎暗示如果提供了小数,则floor将返回小数:http://saxon.sourceforge.net/saxon7.8/functions.html#fn:floor

如何获得整数,以便在我的范围内使用它?

2 个答案:

答案 0 :(得分:4)

您应该可以使用select="1 to xs:integer(floor(string-length($input_string) div 2))",当然您的样式表需要声明xmlns:xs="http://www.w3.org/2001/XMLSchema"

如果继续遇到问题,请告诉我们您使用的Saxon版本,第一个支持2007年规定的XSLT 2.0是Saxon 8.9,当前版本是9.5。

答案 1 :(得分:1)

您也可以使用

select="1 to ($input_string idiv 2)"

虽然我需要检查规范,以确保在所有情况下都能返回相同的答案。