как я могу сделать это наилучшим образом - PullRequest
0 голосов
/ 19 ноября 2011

У меня есть переменная в xslt, которая должна содержать несколько значений, которые зависят от страницы.Я знаю, что <xslt: variable> не может выполнить работу, потому что переменные не могут быть изменены.

Может ли xslt:param выполнять работу и как я могу изменить ее значение на лету?

Roelof

Редактировать 1: Я пытаюсь объяснить, что я хочу.У меня есть веб-сайт, который отображает статьи в месяц.Что мне действительно нравится, так это сценарий, в котором я могу фильтровать статьи, чтобы на страницах отображались только статьи определенного месяца.Но мне нужно решить, сколько статей отображается на каждой странице.Таким образом, количество отображаемых статей зависит от месяца и отображаемой страницы.

1 Ответ

0 голосов
/ 20 ноября 2011

XSLT - это функциональный язык , который, среди прочего, означает, что xsl:variable или xsl:param, если он указан, не может изменить свое значение.

Это не препятствует возможности выразить в XSLT решение любой проблемы (XSLT завершается по Тьюрингу) и требует только одного, чтобы изменить мышление на основе парадигмы императивного программирования.

Как только вы опубликуете вашу конкретную проблему, многие читатели смогут предоставить полные решения XSLT.

Вот простой пример :

Мы «накапливаем» все нужные значения в переменной, а затем выводим ее:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:variable name="vOddsAccumulator">
  <xsl:apply-templates/>
 </xsl:variable>

 <xsl:template match="/">
  <xsl:value-of select="$vOddsAccumulator"/>
 </xsl:template>

 <xsl:template match="*/*"/>

 <xsl:template match="num[. mod 2 = 1]">
  <xsl:value-of select="concat(., ' ')"/>
 </xsl:template>
</xsl:stylesheet>

когда это преобразование применяется к следующему документу XML :

<nums>
  <num>01</num>
  <num>02</num>
  <num>03</num>
  <num>04</num>
  <num>05</num>
  <num>06</num>
  <num>07</num>
  <num>08</num>
  <num>09</num>
  <num>10</num>
</nums>

желаемый результат получен :

01 03 05 07 09 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...