2017-02-23 92 views
1

Не могли бы вы рассказать мне, как вычитать значение в xslt с помощью переменной?как вычесть значение в xslt?

вот мой код http://xsltransform.net/bwdwsJ/3

<xsl:variable name="currentCurpg" select="1"/> 
    <xsl:variable name="tCurpg" select="($currentCurpg-1)"/> 

переменная tCurpg должна быть zero г 0

почему я получаю ошибку

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" /> 

    <xsl:template match="/"> 
     <hmtl> 
     <head> 
      <title>New Version!</title> 
     </head> 
     <xsl:variable name="currentCurpg" select="1"/> 
      <xsl:variable name="tCurpg" select="($currentCurpg-1)"/> 
    <xsl:value-of select="$tCurpg"/> 

     </hmtl> 
    </xsl:template> 


</xsl:transform> 

Я ожидаю выход zero

+0

видеть, что это не показывает значение '0' http://xsltransform.net/bwdwsJ/5 – user944513

+0

Пожалуйста, измените вопрос, чтобы включить XSLT вы испытываете проблема с. Хорошо по-прежнему ссылаться на XSLTransform.net, но веб-сайт часто становится недоступным, что затрудняет ответ на вопрос. Благодарю. –

+0

Спасибо за редактирование вашего вопроса! Я думаю, что вы связались с неправильной версией на xsltransform.net. Я думаю, вам нужно обратиться к http://xsltransform.net/bwdwsJ/4. –

ответ

0

Значение вашего select значения атрибута ul/li[position() &gt;= last()-{$currentCurpg} and position() &lt;= last()-1] недействительно. В атрибутах XSLT вы используете прямые переменные XSLT, поэтому фигурные скобки не должны присутствовать. Другими словами, используйте ul/li[position() &gt;= last()-$currentCurpg and position() &lt;= last()-1].

Также в <xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" /> правильное значение для doctype-public: about:legacy-compat; см. HTML §12.1.1: The DOCTYPE.

И объявление omit-xml-declaration="yes" бессмысленно для HTML, поскольку HTML, сгенерированный с помощью method="html", не является XML и поэтому никогда не будет иметь декларации XML.

Редактировать: ОП, очевидно, первоначально был связан с неправильным кодом, который также имел ошибки.

+0

Я говорю, почему он не работает http://xsltransform.net/bwdwsJ/4 – user944513

+0

@ user944513 Это не работает, потому что вы не помещали пробел между переменной и знаком минус, поэтому знак минус интерпретируется как дефис. Поэтому ваша переменная называется '$ currentCurpg-1' (которая не существует) вместо' $ currentCurpg'. –

+0

@ user944513 Кроме того, 'hmtl' должен быть' html'. –

0

Глядя на ваш код, фигурные {} скобки вокруг переменной не нужно в операторе XSLT только в HTML

eg div title="{$currentCurpg}"> 

так в вашем коде, вам нужно

<xsl:for-each select="ul/li[position() &gt;= (last()-$currentCurpg) and position() &lt;= last()-1]"> 

Обновлено На основе вашего обновленного кода вам нужно отбросить() и положить пробелы между переменной и - 1, как это

<xsl:variable name="tCurpg" select="$currentCurpg - 1"/> 
+0

PLS проверить, почему он не работает http://xsltransform.net/bwdwsJ/4 – user944513

+0

Вам нужно отбросить() и поместить пробелы между именем переменной и -1 на мой обновленный ответ – RT72

3

Проблема заключается в том, что переносы действительны в именах переменных, так что, когда вы это делаете ...

<xsl:variable name="tCurpg" select="($currentCurpg-1)"/> 

Он буквально ищет переменную с именем currentCurpg-1.

Вместо изменить его к этому ...

<xsl:variable name="tCurpg" select="$currentCurpg - 1"/> 
Смежные вопросы