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, ключи сортировки одинаковы, поэтому сортировка не имеет никакого эффекта.