Biks: xsl:sort Dynamische Sortierung

Beitrag lesen

Guten Morgen,

ich habe mir nun eine funktionierende Lösung überlegt und ausprobiert. Solange man zwischen Eigenschaften innerhalb eines Tags auswählen möchte, funktioniert folgendes Beispiel:

  
<xsl:apply-templates select="releases/release" >  
   <xsl:sort select="labels/label/@*[name()=$sortierung]" order="ascending" data-type="text" />  
</xsl:apply-templates>  

Wobei "sortierung" entsprechend meiner XML die Werte catno und name annehmen darf:

  
<release id="105393" status="Accepted">  
 <artists><artist><name>Noisy Youth</name></artist></artists>  
 <title>Midelicious EP</title>  
 <labels><label catno="ADV03" name="Adrenogroov" /></labels>  
</release>  

Komplizierter wird es, wenn die Sortierung beispielsweise nach dem Künstler erfolgen soll. Da bin ich leider nicht um ein weiteres xsl:choose herumgekommen:

  
<xsl:param name="auswahl"/>  
<xsl:param name="sortierung"/>  
  
<xsl:template match="/">  
   <xsl:choose>  
      <xsl:when test="$sortierung='artist'">  
         <xsl:choose>  
  
            <xsl:when test="$auswahl=''">  
               <xsl:apply-templates select="releases/release" >  
                  <xsl:sort select="artists/artist/name" order="ascending" data-type="text" />  
               </xsl:apply-templates>  
            </xsl:when>  
  
            <xsl:otherwise>  
               <xsl:apply-templates select="releases/release[genres/genre[contains($auswahl, .)][1]]">  
           <xsl:sort select="artists/artist/name" order="ascending" data-type="text" />  
        </xsl:apply-templates>  
            </xsl:otherwise>  
  
         </xsl:choose>  
      </xsl:when>  
      <xsl:otherwise>  
         <xsl:choose>  
  
            <xsl:when test="$auswahl=''">  
               <xsl:apply-templates select="releases/release" >  
                  <xsl:sort select="labels/label/@*[name()=$sortierung]" order="ascending" data-type="text" />  
               </xsl:apply-templates>  
            </xsl:when>  
  
            <xsl:otherwise>  
               <xsl:apply-templates select="releases/release[genres/genre[contains($auswahl, .)][1]]">  
                  <xsl:sort select="labels/label/@*[name()=$sortierung]" order="ascending" data-type="text" />  
               </xsl:apply-templates>  
            </xsl:otherwise>  
  
         </xsl:choose>  
      </xsl:otherwise>  
   </xsl:choose>  
</xsl:template>  
  

Vielleicht hilft das ja mal jemanden weiter.

Viele Grüße!

Biks