2013-05-22 4 views
1

Im сходит с ума по этой проблеме XSL у меня есть!xsl: sort не работает вместе с 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> 

ответ

1

К сожалению плохие новости. Это не будет работать. Единственное возможное решение (я вижу на данный момент) - положить целое 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> 
0

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

<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' ложно, ключи сортировки все равно, поэтому сортировка не влияет.

Смежные вопросы