Announcement

Collapse
No announcement yet.

Dynamische Sortierung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dynamische Sortierung

    Hallo,

    ich habe folgendes Problem:
    ich muss nach verschiedenen Kriterien sortieren, aber habe Probleme, dies per XSL auszudrücken.
    Folgendes möchte ich bezwecken:

    Code:
    <xsl:apply-templates select="/SEITE/DATA1[@ID='STAT']/DATA2">
      <xsl:sort select="DATA3[@ID='NUMBER']/DATA4[@ID=$orderby]/ROW_0" order="{$ascdesc}"/>
    </xsl:apply-templates>
    die $ascdesc-Variable lässt sich super ansteuern, aber wie bekomme ich das mit der $orderby-Variable hin. Das funktioniert so wie angegeben leider nicht.

    Hat jemand eine Idee?

  • #2
    Es lassen sich mehrere xsl:sort-Elemente hintereinander angeben.

    Comment


    • #3
      Ja, das weiß ich, aber was bringt mir das in diesem Fall?
      Ich möchte ja nur nach diesem einen Kriterium sortieren...

      Comment


      • #4
        Was steht denn in $orderby drin?

        Comment


        • #5
          Hier ein Beispiel, wie die Daten aufgebaut sind:

          HTML Code:
          <?xml version="1.0" encoding="UTF-8"?>
          <SEITE ID="test">
            
            <DATA1 ID="VARS">
              <ROW_ORDERBY>CRIT_1</ROW_ORDERBY>
              <ROW_ASCDESC>descending</ROW_ASCDESC>
            </DATA1>
            
            <DATA1 ID="STAT">
              
              <DATA2 ID="8">
                <DATA3 ID="MONAT">
                  <ROW_0>8</ROW_0>
                </DATA3>
                <DATA3 ID="NUMBER">
                  <DATA4 ID="CRIT_1">
                    <ROW_0>2</ROW_0>
                  </DATA4>
                  <DATA4 ID="CRIT2">
                    <ROW_0>8</ROW_0>
                  </DATA4>
                  <DATA4 ID="CRIT3">
                    <ROW_0>11</ROW_0>
                  </DATA4>
                </DATA3>
              </DATA2>
              
              <DATA2 ID="9">
                <DATA3 ID="MONAT">
                  <ROW_0>8</ROW_0>
                </DATA3>
                <DATA3 ID="NUMBER">
                  <DATA4 ID="CRIT_1">
                    <ROW_0>4</ROW_0>
                  </DATA4>
                  <DATA4 ID="CRIT2">
                    <ROW_0>9</ROW_0>
                  </DATA4>
                  <DATA4 ID="CRIT3">
                    <ROW_0>18</ROW_0>
                  </DATA4>
                </DATA3>
              </DATA2>
              
            </DATA1>
          </SEITE>
          das dazugehörige XSL:
          HTML Code:
          <?xml version="1.0"?>
          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
            <xsl:output method="html"/>
            
            <xsl:variable name="orderby" select="/SEITE/DATA1[@ID='VARS']/ROW_ORDERBY"/>
            <xsl:variable name="ascdesc" select="/SEITE/DATA1[@ID='VARS']/ROW_ASCDESC"/>
            
            <xsl:template match="/">
              <!-- Datenzeilen -->
              <xsl:apply-templates select="/SEITE/DATA1[@ID='STAT']/DATA2">
                <xsl:sort select="DATA3[@ID='NUMBER']/DATA4[@ID='{$orderby}']/ROW_0" order="{$ascdesc}"/>
              </xsl:apply-templates>
            </xsl:template>
            
          </xsl:stylesheet>
          Ich brauche eine Möglichkeit, das xsl:sort-Statement zu schreiben.

          Schreibe ich folgendes (also "CRIT_1" statisch hinein), funktioniert alles wunderbar:

          HTML Code:
          <xsl:apply-templates select="/SEITE/DATA1[@ID='STAT']/DATA2">
                <xsl:sort select="DATA3[@ID='NUMBER']/DATA4[@ID='CRIT_1']/ROW_0" order="{$ascdesc}"/>
              </xsl:apply-templates>

          Comment


          • #6
            <xsl:sort select="DATA3[@ID='NUMBER']/DATA4[@ID='{$orderby}']/ROW_0" order="{$ascdesc}"/>

            Du vergleichst mit einer Zeichenkette und nicht mit der Variable selbst (deshalb fragte ich ja, was drin steht)! Das vermeintliche Attribute Value Template wirkt dort nicht.

            Ich erhalte bei Deinem Code sowohl mit .../DATA4[@ID='CRIT_1']/... als auch mit .../DATA4[@ID=$orderby]/... das Ergebnis 8491882811. Falls es dennoch nicht funktioniert, wäre string($orderby) noch eine Option.

            Comment


            • #7
              Dankeschön, es funktioniert!

              Ich hatte den Fehler an anderer Stelle und da ich nicht wusste, dass dies wirklich funktioniert mit der Variable an die ID übergeben, ging ich davon aus, das dort der Fehler steckt.

              Jetzt weiß ich das es geht und konnte den Fehler an anderer Stelle auch lokalisieren.

              Vielen Dank für die schnelle Hilfe!

              Comment

              Working...
              X