2013-05-22 82 views
1

我對這個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'是假的,排序關鍵字都是一樣的,所以分類沒有效果。

相關問題