Anwenden von Vorlagen in umgekehrter Reihenfolge mit XSLT

Beim Arbeiten mit XML-Daten kann es Szenarien geben, in denen Sie die Reihenfolge manipulieren müssen, in der Elemente angezeigt werden. Eine häufige Anforderung besteht darin, den Inhalt von Knoten in umgekehrter Reihenfolge anzuzeigen. Dieser Blogbeitrag führt Sie durch den Prozess, um dies mit XSLT (Extensible Stylesheet Language Transformations) zu erreichen.

Das Problem verstehen

Betrachten Sie die folgende XML-Struktur:

<root>
    <node>x</node>
    <node>y</node>
    <node>a</node>
</root>

In diesem Beispiel möchten Sie den Inhalt der <node>-Elemente in umgekehrter Reihenfolge anzeigen, was zu der Ausgabe führt: ayx. Dies ist eine typische Aufgabe, die mit XSLT durch die Verwendung von apply-templates und Sortierattributen erledigt werden kann.

Die Lösung: Umkehren der Knotenreihenfolge

Um die gewünschte Ausgabe zu erzielen (d.h. Knoten in umgekehrter Reihenfolge anzuzeigen), nutzen wir das Element xsl:sort innerhalb von apply-templates. Hier erfahren Sie Schritt für Schritt, wie Sie es implementieren:

Schritt 1: Übereinstimmung mit der Root-Vorlage

Beginnen Sie mit der Übereinstimmung auf der Root-Ebene Ihres XML-Dokuments. Innerhalb dieser Vorlage wenden Sie Vorlagen auf die <node>-Elemente an und verwenden die sort-Funktion, um die Reihenfolge umzukehren.

<xsl:template match="/">
    <xsl:apply-templates select="root/node">
        <xsl:sort select="position()" data-type="number" order="descending"/>
    </xsl:apply-templates>
</xsl:template>
  • <xsl:template match="/">: Dies übereinstimmt mit der Wurzel des XML-Dokuments.
  • <xsl:apply-templates select="root/node">: Diese Direktive wählt alle <node>-Elemente zur Verarbeitung aus.
  • <xsl:sort select="position()" data-type="number" order="descending"/>: Dies sortiert die Knoten basierend auf ihren Positionen in absteigender Reihenfolge, was entscheidend ist, um sie umgekehrt darzustellen.

Schritt 2: Definieren der Knoten-Vorlage

Als Nächstes benötigen Sie eine weitere Vorlage, um zu steuern, wie jedes <node> verarbeitet wird. Dies wird einfach den Wert jedes <node>-Elements ausgeben.

<xsl:template match="node">
    <xsl:value-of select="."/>
</xsl:template>
  • <xsl:template match="node">: Diese Vorlage stimmt mit jedem <node>-Element überein.
  • <xsl:value-of select="."/>: Dies ruft den Stringwert des aktuellen Knotens ab und zeigt ihn an.

Vollständiger XSLT-Code

Wenn Sie beide Vorlagen kombinieren, erhalten Sie den folgenden vollständigen XSLT-Code:

<xsl:template match="/">
    <xsl:apply-templates select="root/node">
        <xsl:sort select="position()" data-type="number" order="descending"/>
    </xsl:apply-templates>
</xsl:template>

<xsl:template match="node">
    <xsl:value-of select="."/>
</xsl:template>

Ausgabe

Nachdem Sie diesen XSLT-Code auf die bereitgestellte XML angewendet haben, wird die resultierende Ausgabe die Knotenwerte in umgekehrter Reihenfolge ihrer Erscheinung anzeigen:

ayx

Fazit

Die Umkehrung der Reihenfolge von XML-Knoten mit apply-templates in XSLT ist unkompliziert, sobald Sie verstehen, wie Sie die sort-Operation effektiv nutzen können. Dieser Ansatz ist vorteilhaft, wenn Sie die Darstellung von Daten für Berichte oder Webanwendungen manipulieren möchten, um das Benutzererlebnis zu verbessern.

Indem Sie diese Schritte befolgen, können Sie die Ausgabe Ihrer XML-Daten effizient mit XSLT steuern. Viel Spaß beim Codieren!