Achtung Kopfsalat – von XML in XML mittels XSLT
Beliebt im Austausch von Daten ist das XML-Format (Extensible Markup Language). Es bietet die
Vorteile einer leserlichen Struktur von Daten im Klartext. Oftmals ist in nun gefordert, dass Daten von
einem Format in ein anderes übertragen werden sollen. Kann man dabei eine Transformation von
einer XML in eine andere vornehmen, so bietet es sich an in diesem „Universum“ zu bleiben und eine
weitere XML zu verwenden. Eine solche Datei nennt sich XSL und wird zur Transformation verwendet
XSLT.
Mit der XSL wird in der bekannten XML-Syntax Logik programmiert, welche einer richtigen
Programmiersprache in nichts nachsteht.
- Schleifen (<xsl:foreach>)
- Verzweigungen (<xsl:if test="...">)
- Auslesen eines XML-Wertes (<xls:value-of select="...">)
Nachfolgend möchte ich euch noch ein kurzes Beispiel zeigen, welches die Mächtigkeit einer solchen XSL-Transformation erahnen lässt:
Eingangs-XML
<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="sales-check-transform.xsl"?> <basket_list> <product price="3.49€"> <name language="de">Butter</name> <name language="en">butter</name> </product> <product price="0.98€"> <name language="de">Margarine</name> </product> <product price="2.99€"> <name language="de">Lätta</name> </product> </basket_list>
Transformations-XSL
<xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml"/> <xsl:template match="/"> <sales_check> <xsl:for-each select="basket_list/product"> <item> <bought_product> <de_name> <xsl:value-of select="./name[@language='de']" /> </de_name> <xsl:if test="./name[@language='en'] != ''"> <en_name> <xsl:value-of select="./name[@language='en']" /> </en_name> </xsl:if> </bought_product> </item> </xsl:for-each> </sales_check> </xsl:template> </xsl:stylesheet>
Ergebnis
<?xml version="1.0" encoding="utf-8"?> <sales_check xmlns="http://www.w3.org/1999/xhtml"> <item> <bought_product> <de_name>Butter</de_name> <en_name>butter</en_name> </bought_product> </item> <item> <bought_product> <de_name>Margarine</de_name> </bought_product> </item> <item> <bought_product> <de_name>Lätta</de_name> </bought_product> </item> </sales_check>
Nah, überzeugt? Noch nicht? Dann nenne ich noch ein paar weitere Vorteile dieses Verfahrens:
- Viele weitere Funktionen, die hier noch nicht behandelt wurde, wie z.B. Templating,
Aufteilung der Logiken in mehrere Dateien und die Ausgabe als HTML
- Version 2.x mit neuen Funktionen
- Platzsparende Programmierung der Logiken (Wer es mir nicht glaubt, der kann gerne eine Java-Klasse zu dieser Transformation und mir mit glühenden Fingern seine dreistellige Zeilennummer nennen :-)
Fazit: Definitiv eines Blickes wert wenn es um die Anforderung XML -> XML geht. Am besten ein
eigenes Bild machen. Über eure Erfahrungen freue ich mich sehr.
Author: JaXt0r
»Kicon« Koken Icon Webfont
Halloween im Sommer