Thomas278: Problem mit Sortierung durch xslt

Beitrag lesen

Hallo zusammen,

ich habe folgende xml-Datei

<?xml version="1.0" encoding="utf-8"?>  
<Daten>  
    <Eintrag ID="20110929000001" ZE1="Organisation" ZE2="Netzwerke pflegen" ZE3="">  
        <Titel>Erstellung Geburtstagsliste</Titel>  
        <Datum>29.11.2011</Datum>  
        <Termin>0</Termin>  
        <Status>offen</Status>  
    </Eintrag>  
    <Eintrag ID="20111206100442" ZE1="SG" ZE2="TuA" ZE3="">  
        <Titel>Kontaktdaten</Titel>  
        <Datum>12.12.2011</Datum>  
        <Termin>2</Termin>  
        <Status>neu</Status>  
        <Dokument ID="20111206100555">  
            <Datum>01.12.2011</Datum>  
            <Originalname>AW: E-Titel </Originalname>  
            <Originalpfad/>  
            <Pfad>\Cockpit2_Dateien\20111206100555---AW_E-Titel.msg</Pfad>  
            <Name>AW: E-Titel angepasst </Name>  
            <Suchwort/>  
            <Version>1</Version>  
        </Dokument>  
    </Eintrag>  
    <Eintrag ID="20111205130302" ZE1="SAS" ZE2="Projekt" ZE3="">  
        <Titel>TuA-Paket</Titel>  
        <Datum>17.01.2012</Datum>  
        <Termin>40886</Termin>  
        <Status>erledigt</Status>  
        <Kommentar ID="20111205130416">  
            <Datum>05.12.2011</Datum>  
            <Text>Was ist Umfang der Lieferung</Text>  
        </Kommentar>  
    </Eintrag>  
    <Eintrag ID="20111205130124" ZE1="SAS" ZE2="Projekt" ZE3="">  
        <Titel>Testbewertung</Titel>  
        <Datum>16.01.2012</Datum>  
        <Termin>40885</Termin>  
        <Status>erledigt</Status>  
        <Dokument ID="20111206100922">  
            <Datum>03.12.2011</Datum>  
            <Originalname>laufende Tests</Originalname>  
            <Originalpfad/>  
            <Pfad>\Cockpit2_Dateien\20111206100922---laufende Tests.msg</Pfad>  
            <Name>Tests</Name>  
            <Suchwort/>  
            <Version>3</Version>  
        </Dokument>  
        <Kommentar ID="20111205130149">  
            <Datum>05.12.2011</Datum>  
            <Text>Rücksprache</Text>  
        </Kommentar>  
        <Dokument ID="20111206101921">  
            <Datum>05.12.2011</Datum>  
            <Originalname>Ergebnisse</Originalname>  
            <Originalpfad/>  
            <Pfad>\Cockpit2_Dateien\20111206101921---Ergebnisse.msg</Pfad>  
            <Name>Ergebnisse</Name>  
            <Suchwort/>  
            <Version>5</Version>  
        </Dokument>  
        <Dokument ID="20111206100922">  
            <Datum>02.12.2011</Datum>  
            <Originalname>Tests</Originalname>  
            <Originalpfad/>  
            <Pfad>\Cockpit2_Dateien\20111206100922---Tests.msg</Pfad>  
            <Name>Tests2</Name>  
            <Suchwort/>  
            <Version>2</Version>  
        </Dokument>  
        <Kommentar ID="20111208160533">  
            <Datum>08.12.2011</Datum>  
            <Text>Neue Tests</Text>  
        </Kommentar>  
    </Eintrag>  
</Daten>

und will mit folgendem xslt

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
  <xsl:strip-space elements="*"/>  
  <xsl:output method="xml" indent="yes"/>  
  
   <xsl:template match="Daten">  
    <xsl:copy>  
      <xsl:apply-templates select="@* | node()">  
            <xsl:sort select="Termin" data-type="number"/>  
     </xsl:apply-templates>  
    </xsl:copy>  
  </xsl:template>  
  
  <xsl:template match="Daten/Eintrag">  
    <xsl:copy>  
      <xsl:apply-templates  select="@* | node()">  
           <xsl:sort select="Version" order="descending" data-type="number"/>  
      </xsl:apply-templates>  
    </xsl:copy>  
  </xsl:template>  
  
  <xsl:template match="@* | node()">  
    <xsl:copy>  
      <xsl:apply-templates select="@* | node()"/>  
    </xsl:copy>  
  </xsl:template>  
  
</xsl:stylesheet>

die Elemente sortieren.
Dies funktioniert auch, solange ich für die Sortierung von <Version> in Zeile 16 im xslt nicht order = "Descending" setze. Bei "ascending" erhalte ich für die Sortierreihenfolge aufsteigend der Dokument-Knoten das erwartete Ergebnis.

<?xml version="1.0" encoding="utf-8"?>  
<Daten>  
  <Eintrag ID="20110929000001" ZE1="Organisation" ZE2="Netzwerke pflegen" ZE3="">  
    <Titel>Erstellung Geburtstagsliste</Titel>  
    <Datum>29.11.2011</Datum>  
    <Termin>0</Termin>  
    <Status>offen</Status>  
  </Eintrag>  
  <Eintrag ID="20111206100442" ZE1="SG" ZE2="TuA" ZE3="">  
    <Titel>Kontaktdaten</Titel>  
    <Datum>12.12.2011</Datum>  
    <Termin>2</Termin>  
    <Status>neu</Status>  
    <Dokument ID="20111206100555">  
      <Datum>01.12.2011</Datum>  
      <Originalname>AW: E-Titel </Originalname>  
      <Originalpfad />  
      <Pfad>\Cockpit2_Dateien\20111206100555---AW_E-Titel.msg</Pfad>  
      <Name>AW: E-Titel angepasst </Name>  
      <Suchwort />  
      <Version>1</Version>  
    </Dokument>  
  </Eintrag>  
  <Eintrag ID="20111205130124" ZE1="SAS" ZE2="Projekt" ZE3="">  
    <Titel>Testbewertung</Titel>  
    <Datum>16.01.2012</Datum>  
    <Termin>40885</Termin>  
    <Status>erledigt</Status>  
    <Kommentar ID="20111205130149">  
      <Datum>05.12.2011</Datum>  
      <Text>Rücksprache</Text>  
    </Kommentar>  
    <Kommentar ID="20111208160533">  
      <Datum>08.12.2011</Datum>  
      <Text>Neue Tests</Text>  
    </Kommentar>  
    <Dokument ID="20111206100922">  
      <Datum>02.12.2011</Datum>  
      <Originalname>Tests</Originalname>  
      <Originalpfad />  
      <Pfad>\Cockpit2_Dateien\20111206100922---Tests.msg</Pfad>  
      <Name>Tests2</Name>  
      <Suchwort />  
      <Version>2</Version>  
    </Dokument>  
    <Dokument ID="20111206100922">  
      <Datum>03.12.2011</Datum>  
      <Originalname>laufende Tests</Originalname>  
      <Originalpfad />  
      <Pfad>\Cockpit2_Dateien\20111206100922---laufende Tests.msg</Pfad>  
      <Name>Tests</Name>  
      <Suchwort />  
      <Version>3</Version>  
    </Dokument>  
    <Dokument ID="20111206101921">  
      <Datum>05.12.2011</Datum>  
      <Originalname>Ergebnisse</Originalname>  
      <Originalpfad />  
      <Pfad>\Cockpit2_Dateien\20111206101921---Ergebnisse.msg</Pfad>  
      <Name>Ergebnisse</Name>  
      <Suchwort />  
      <Version>5</Version>  
    </Dokument>  
  </Eintrag>  
  <Eintrag ID="20111205130302" ZE1="SAS" ZE2="Projekt" ZE3="">  
    <Titel>TuA-Paket</Titel>  
    <Datum>17.01.2012</Datum>  
    <Termin>40886</Termin>  
    <Status>erledigt</Status>  
    <Kommentar ID="20111205130416">  
      <Datum>05.12.2011</Datum>  
      <Text>Was ist Umfang der Lieferung</Text>  
    </Kommentar>  
  </Eintrag>  
</Daten>

Hier will ich die höchste Version als erstes Dokument-Element innerhalb des Eintrag-Knoten erhalten.

Warum funktioniert das xlst nicht?

Leider benötige ich die Sotierung im xml, weil es ein weiteres Programm diese nutzt und hier die Anzeige nicht sortierbar gestaltet wurde. Wenn die Elemente in der richtigen Reihenfolge vorliegen, erfolgt auch die Anzeige korrekt.

Vielen Dank für Lösungen/Hinweise

Thomas