xsl:sort не работает вместе с xsl: выбирать или, если

Я схожу с ума от этой проблемы XSL, которая у меня есть!

Дело в том, что я хочу отсортировать газету после того, что выбрано в ФОРМЕ. Если $sort_newspaper = 'name' и это должно сортировать после имени (<xsl:sort select="./@name"/>)... но... это не работает, если xsl:sort существуют внутри выбора или после. Это также не работает с xsl:if,

Чтобы быть понятным, это работает как код сейчас, выбор работает...

    <xsl:for-each select="./newspaper[count(. | key('newspaper_key', ./@id)[1]) = 1]">
            <xsl:sort select="./@name"/> 

            <xsl:choose>
                <xsl:when  test="$sort_newspaper = 'name'">
                    XSL:SORT SHOULD BE HERE BUT THAT WILL RESULT IN ERROR!
                </xsl:when>
                <xsl:otherwise>
                    HALLO
                </xsl:otherwise>
            </xsl:choose>
IF XSL:SORT WOULD BE HERE IT WOULD RESULT IN ERROR TOO!
    </xsl:for-each>

2 ответа

Решение

Извините плохие новости. Это не будет работать. Единственно возможное решение (я вижу на данный момент) было бы поставить весь xsl:for-each в xsl:when (с сортировкой или без нее).

Ваш пример кода должен выглядеть следующим образом:

<xsl:variable name="newspaper_group" select="./newspaper[count(. | key('newspaper_key', ./@id)[1]) = 1]" />
<xsl:choose>
    <xsl:when  test="$sort_newspaper = 'name'">
        <xsl:for-each select="$newspaper_group" >
            <xsl:sort select="./@name"/>
            <!-- Sorted stuff -->
        </xsl:for-each>
    </xsl:when>
    <xsl:otherwise>
        <xsl:for-each select="$newspaper_group" >
            <!-- Unsorted stuff -->
        </xsl:for-each>
    </xsl:otherwise>
</xsl:choose>

Вот альтернативное решение

<xsl:variable name="newspaper_group" select="..." />

<xsl:for-each select="$newspaper_group" >
    <xsl:sort select="./@name[$sort_newspaper = 'name']"/>
            <!-- Sorted stuff -->
</xsl:for-each>

Это работает так, что если $sort_newspaper = 'name' Значение false, ключи сортировки одинаковы, поэтому сортировка не имеет никакого эффекта.

Другие вопросы по тегам