#xslt #xslt-2.0 #saxon
#xslt #xslt-2.0 #саксонский
Вопрос:
Я использую 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: целое число; предоставленное значение имеет тип элемента xs: десятичное
Я бы подумал, что результирующий тип floor()
будет целым числом, но это, похоже, подразумевает, что floor вернет десятичное число, если указано десятичное число: http://saxon.sourceforge.net/saxon7.8/functions.html#fn:floor
Как мне получить целое число, чтобы я мог использовать его в своем диапазоне?
Ответ №1:
Вы должны иметь возможность использовать select="1 to xs:integer(floor(string-length($input_string) div 2))"
, конечно, затем необходимо объявить вашу таблицу xmlns:xs="http://www.w3.org/2001/XMLSchema"
стилей.
Если по-прежнему возникают проблемы, пожалуйста, сообщите нам, какую версию Saxon вы используете, первой для поддержки XSLT 2.0, как указано в 2007 году, была Saxon 8.9, текущая версия 9.5.
Комментарии:
1. Я не знал, что вы можете «использовать» подобные выражения — спасибо!
Ответ №2:
Вы также можете использовать
select="1 to ($input_string idiv 2)"
хотя мне нужно было бы проверить спецификацию, чтобы быть уверенным, что это возвращает один и тот же ответ при любых обстоятельствах.