2011-11-19 4 views
0

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

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

Roelof

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

+1

Я предполагаю, что вы пытаетесь использовать XSLT в пути коммунистической программы. Не могли бы вы разместить несколько примеров вашего ввода, а также ваш желаемый результат? Как бы то ни было, ваш вопрос не может быть обоснованно ответил. Я боюсь. – FailedDev

ответ

0

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

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

После публикации вашей конкретной проблемы многие читатели смогут предоставить полные решения 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> 

Требуемый г esult производится:

01 03 05 07 09 
Смежные вопросы