我正在使用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
如何获得整数,以便在我的范围内使用它?
答案 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)"
虽然我需要检查规范,以确保在所有情况下都能返回相同的答案。