<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
Обновление
ОП в комментарии изменил / уточнил свой первоначальный вопрос:
Чего я пытаюсь добиться, так это того, что если это не 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')
"/>
Объяснение
Мы используем тот факт, что в XPath 1.0 по определению number($someBoolean)
равно 1
, если $someBoolean
равно true()
и 0
, если $someBoolean
равно false()
.
Следовательно, псевдокод:
if($vCond)
then $vNum1
else $vNum2
можно выразить одним выражением XPath:
$vNum1*$vCond + $vNum2*not($vCond )
всякий раз, когда логическое значение является аргументом арифметического оператора, оно автоматически преобразуется в число.
Итак, вот что происходит во время выполнения:
Предположим, $vCond
равно true()
, поэтому not($vCond)
равно false()
.
Поскольку $vCond
и not($vCond)
являются аргументами оператора *
, они преобразуются в числа соответственно 1
и 0
:
...
$vNum1*1 + $vNum2*0
- Это эквивалентно:
...
$vNum1*1
Примечание :
Приведенное выше правило эквивалентности может быть дополнительно обобщено на N взаимоисключающие условия $vCond1
, $vCond2
, ..., $vCondN
и соответствующие значения N: $val1
, $val2
, ..., $valN
:
$val1*$vCond1 + $val2*$vCond2 + ... + $valN*$vCondN
равно $valK
(k
в {1,..., N}
) именно тогда, когда $vCondK
равно true()