Announcement

Collapse
No announcement yet.

Wie kann man in einer XSLT-Datei die Einheiten absteigend nach Jahr sortieren?

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

  • Wie kann man in einer XSLT-Datei die Einheiten absteigend nach Jahr sortieren?

    Da ich eine Anfängerin in XSLT und XML bin, würde ich mich sehr freuen, wenn jemand mir mit folgender Aufgabe helfen würde. Ich frage mich, wie man die Autos absteigend nach Baujahr aus folgender XML-Datei sortieren kann. Hier ist ein Beispiel mit einem Auto, aber wie wäre es, wenn in der Datei mehrere Autos wären, die in einer XSLT-Ausgabe folgendermaßen aussehen würden:

    <h2>Autoliste absteigend nach dem Jahr: </h2>
    <table>
    <tr>
    <th>Name</th>
    <th>Jahr</th>
    </tr>
    <tr>
    <td>Seat Leon 2.0 TSI Cupra 300 4Drive</td>
    <td>2015</td>
    </tr>

    <tr>
    <td>Opel Mokka X</td>
    <td>2014</td>
    </tr>

    <tr>
    <td> Mercedes-Benz</td>
    <td> 2013</td>
    </tr>
    </table>

    XML-Auszug:
    <pc:title>Autoliste</pc:title>
    <pc:autoübersicht>
    <pc:auto bauform="Kombi">Seat Leon 2.0 TSI Cupra 300 4Drive</pc:auto>
    </pc:autoübersicht>

    <pc:autos>
    <pc:auto name="Seat Leon 2.0 TSI Cupra 300 4Drive" bestandsnummer="ZB46286" url="#" umweltfreundlich="ja">
    <pc:eigenschaften>
    <pc:eigenschaft value="Preis" einheit='Euro'>11.700</pc:eigenschaft>
    <pc:eigenschaft value="Vorbesitzer" einheit="Stück">2</pc:eigenschaft>
    <pc:eigenschaft value="Erstzulassung" einheit="Jahr">2015</pc:eigenschaft>
    <pc:eigenschaft value="Kilometerstand" einheit="km">84.496</pc:eigenschaft>
    <pc:eigenschaft value="Kraftstoff">Benzin</pc:eigenschaft>
    <pc:eigenschaft value="Getriebe">Automatik</pc:eigenschaft>
    <pc:eigenschaft value="Reifensaison">Sommer</pc:eigenschaft>
    <pc:eigenschaft value="Herkunftsland">Deutschland</pc:eigenschaft>
    </pc:eigenschaften>
    </pc:auto>
    </pc:autos>
    </pc:autoweb>

  • #2
    Falls die Frage noch relevant ist, hier ein XSLT-Ansatz:

    HTML Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:pc="http://example.org/autoweb" exclude-result-prefixes="pc">
    
      <xsl:output method="html" version="5" encoding="UTF-8" indent="yes"/>
    
      <xsl:template match="pc:autoweb">
        <html lang="de">
          <head>
            <title><xsl:value-of select="pc:title"/></title>
            <style>table, th, td { border: 1px solid #000; border-collapse: collapse; padding: 0.5em;</style>
          </head>
          <body>
            <h1>Autoliste absteigend nach dem Jahr</h1>
            <table>
              <tr>
                <th>Name</th>
                <th>Jahr</th>
              </tr>
              <xsl:apply-templates select="pc:autos/pc:auto">
                <xsl:sort select="pc:eigenschaften/pc:eigenschaft[@value='Erstzulassung'][@einheit='Jahr']" data-type="number" order="descending"/>
              </xsl:apply-templates>
            </table>
          </body>
        </html>
      </xsl:template>
    
      <xsl:template match="pc:auto">
        <tr>
          <td><xsl:value-of select="@name"/></td>
          <td><xsl:value-of select="pc:eigenschaften/pc:eigenschaft[@value='Erstzulassung'][@einheit='Jahr']"/></td>
        </tr>
      </xsl:template>
    
    </xsl:stylesheet>
    Wobei ich das XML-Dokument so rekonstruiert habe:

    HTML Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <pc:autoweb xmlns:pc="http://example.org/autoweb">
      <!-- ... -->
    </pc:autoweb>

    Comment


    • AndreasT
      AndreasT commented
      Editing a comment
      Du musst sort verwnden und dann den Typ angeben "in diesem fall text" <xsl:sort select ="xyz" data-type ="text"/>

  • #3
    Ich habe die Sortierung doch drin und zwar nach number, da es um die Jahres*zahlen* geht. Bei text würde man für den Testcase 10 | 11 | 101 -> 10 | 101 | 11 erhalten.

    Comment

    Working...
    X