Ошибка построения атрибутов в Entity, строка: 14 - PullRequest
1 голос
/ 31 декабря 2011

У меня есть этот xslt:

<xsl:param name="total_articles" select="3" />
<xsl:param name="articles_per_page" select="3" />

<xsl:apply-templates select="dagboek/entry[position &gt; $offset][position &lt; $articles_per_page+$offset]" >
   <xsl:with-param name="total_pages" tunnel="yes">
  <xsl:choose>
          <xsl:when test="$value="2005-09" and $page="1">8</xsl:when>
         <xsl:otherwise>floor(number($total_articles)-1) div $articles_per_page +1</xsl:otherwise>
  </xsl:choose>
  </xsl:with-param>
</xsl:apply-templates>

Но теперь я получаю эту ошибку.

Как я могу рассчитать результат расчета и поместить его в параметр total_pages.

Roelof

Редактировать 1: То, чего я пытаюсь добиться, это то, что если это не 2005-09, а страница не 1, то итоговые страницы вычисляются из total_articles и articles_per_page. Результат должен быть помещен в страницы параметров.

Ответы [ 3 ]

1 голос
/ 31 декабря 2011
<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 )

всякий раз, когда логическое значение является аргументом арифметического оператора, оно автоматически преобразуется в число.

Итак, вот что происходит во время выполнения:

  1. Предположим, $vCond равно true(), поэтому not($vCond) равно false().

  2. Поскольку $vCond и not($vCond) являются аргументами оператора *, они преобразуются в числа соответственно 1 и 0:

...

$vNum1*1 + $vNum2*0
  1. Это эквивалентно:

...

$vNum1*1

Примечание :

Приведенное выше правило эквивалентности может быть дополнительно обобщено на N взаимоисключающие условия $vCond1, $vCond2, ..., $vCondN и соответствующие значения N: $val1, $val2 , ..., $valN:

$val1*$vCond1 + $val2*$vCond2 + ... + $valN*$vCondN

равно $valK (k в {1,..., N}) именно тогда, когда $vCondK равно true()

0 голосов
/ 31 декабря 2011

Это строка?

<xsl:when test="$value="2005-09" and $page="1">8</xsl:when>

Вы вкладываете двойные кавычки - это не сработает.Используйте комбинацию одинарных и двойных кавычек:

<xsl:when test='$value="2005-09" and $page=1'>8</xsl:when>
0 голосов
/ 31 декабря 2011

У вас плохо сформированный атрибут:

<xsl:when test="$value="2005-09" and $page="1">8</xsl:when>

Это должно выглядеть примерно так:

<xsl:when test="$value='2005-09' and $page='1'">8</xsl:when>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...