ueltschisa: XSL Sortieren nach Bedingung

Hallo

Ich versuche einen Bug in HP ServiceDesk zu beheben. SD generiert seine Druckausgabe mittels XSL. Darin sind jedoch einige Datensätze falsch nach Datum sortiert. Ich versuche nun das ganze über xsl zu sortieren (xsl:sort)

Die XML Daten sehen in etwa so aus (habe die richtigen daten nicht, da die Dynamisch generiert werden):

<table>
<entity>
        <group>
               <field caption="title">der titel</field>
               <field caption="date">10/12/2007</field>
        </group>
</entity>
<entity>
        <group>
               <field caption="title">der titel</field>
               <field caption="date">13/12/2007</field>
        </group>
</entity>
<entity>
        <group>
               <field caption="title">der titel</field>
               <field caption="date">12/12/2007</field>
        </group>
</entity>
<entity>
        <group>
               <field caption="title">der titel</field>
               <field caption="date">01/12/2007</field>
        </group>
</entity>
</table>

Daraus wird eine Tabelle generiert. Jeder group node ist eine Row, die einzelnen field nodes sind fields. Jetzt möchte ich die Row's nach Datum sortieren.

So sieht der xsl code aus:

<xsl:for-each select="entity">
 <!-- Hier kommt sortier befehl -->
              <xsl:for-each select="group">
                  <tr>
                                <xsl:for-each select="field">
                                              <td>
                                                  <xsl:value-of select="."/>
                                              </td>
                                </xsl:for-each>
                  </tr>
              </xsl:for-each>
</xsl:for-each>

Mein Problem ist, ich weis nicht wie ich das ganze sortieren soll, da das Datum feld zu weit unten in der xml struktur ist. Gibt es eine möglichkeit wie ich mit
<xsl:sort select="..."/>
sortieren kann?

mfg ueltschisa

  1. Hallo ueltschisa,

    <xsl:sort select="..."/>
    sortieren kann?

    in diesem Fall hilft ein mehrfaches Sortieren nach den Datums-Teilwerten:

      
    ...  
    <xsl:sort select="number(substring(group/field[@caption='date'],1,2))" data-type="number" order="ascending"/>  
    <xsl:sort select="number(substring(group/field[@caption='date'],4,2))" data-type="number" order="ascending"/>  
    <xsl:sort select="number(substring(group/field[@caption='date'],7,4))" data-type="number" order="ascending"/>  
    ...
    

    Grüße,
    Thomas

    1. Ich wuerde aber zuerst mit der Jahreszahl anffangen, dann den Monat und dann den Tag ;-)

      Gruß, H.

      1. Hallo

        Danke für die Antworten, ist genau das, was ich suchte

        mfg ueltschisa