Werbung einblenden Werbung ausblenden


Home / Tutorials / xml, xsl, xpath Handbuch / XML auslesen mit Perl XSLT


Auslesen eines XML Dokumentes mit XSLT unter Verwendung von Perl XSLT
Transformation mittels eines Perl Skriptes

Auslesen eines XML Dokumentes mit XSLT unter Verwendung von Perl XSLT

Um dieses Kapitel zu verstehen, sollte man sich das unter Auslesen eines XML Dokumentes mit XSLT geschriebene in Erinnerung rufen. Um XSLT Stylesheets im Internet zu verwenden ist wohl in der Regel günstiger, sie auf den Server zu parsen und dann den HTML Ergebnisbaum an den Browser zu schicken. Eine Lösung über JavaScript ist weniger günstig, da die Vorgehensweise je nach Browser unterschiedlich ist. Ist man mit XSLT vertraut, ist die Nutzung des Moduls selbsterklärend. Schwieriger ist es, das Teil überhaupt zu installieren. Es liegt noch kein ppm Package von Activestate vor. Am einfachsten ist es, man holt es sich von http://theoryx5.uwinnipeg.ca/ppmpackages/ wenn man die Version ActivePerl build 6xx, basierend auf perl-5.6.1 benutzt und von http://theoryx5.uwinnipeg.ca/ppms/ wenn man die Version ActivePerl build 8xx, basierend auf perl-5.8.0 benutzt. Die genaue Vorgehensweise ist dann unter Auslesen einer XML Datei mit dem Perl Modul XML::LIBXML beschrieben. Das Modul XML::LibXML muss schon geladen sein, will man das Modul XML::LibXSLT nutzen. Das Modul XML::LibXSLT wird genauso installiert wie das Modul XML::LibXML. Hat man es installiert, gestaltet sich die Nutzung relativ einfach. Wir gehen wieder von der XML Datei aus, die allen Beispielen zugrunde liegt.

<?xml version="1.0" encoding="utf-8"?><Projekte>
<Gruppe>
<Gruppenname stand="abgeschifft">Berliner Verwaltungsreform</Gruppenname>
<Kollegen>
<Mitarbeiter Firma="Preis Wasserhaus" Summe="90000">Werner Lepinski</Mitarbeiter>
<Mitarbeiter Firma="Schitag Ernst und Jung" status="ausgeliehen" Summe="20000">Erika Saufwech</Mitarbeiter>
<Mitarbeiter Summe="27000">Hans Geldfliech</Mitarbeiter>
</Kollegen>
<Ansprechpartner Telefon="030-435555" Ident="A_1">Otto Moltoimportante</Ansprechpartner>
<Adresse>
<Strasse Gegend="teures Pflaster">Kurfürstendamm 5</Strasse>
<Ort>13453 Berlin</Ort>
</Adresse>
<Budget>40 000000</Budget>
<Kommentar>Alles wird gut</Kommentar>
</Gruppe>
<Gruppe>
<Gruppenname>Hamburger Verwaltungschaos </Gruppenname>
<Kollegen>
<Mitarbeiter Firma="Treue Arbeit GmbH">Franz Pingelkniek</Mitarbeiter>
<Mitarbeiter Firma="Arthur der Kleine" Summe="30000">Werner Nordflut</Mitarbeiter>
<Mitarbeiter Firma="Wertarbeit" status="ausgeliehen" Summe="40000">Marina Meimportauncarajo</Mitarbeiter>
<Mitarbeiter Firma="Preis Wasserhaus" Summe="70000" status="ausgeliehen">Peter Wessnich</Mitarbeiter>
</Kollegen>
<Ansprechpartner Ident="A_2">Ludwig Noresponsable</Ansprechpartner>
<Adresse>
<Strasse>An der Waterkant 15</Strasse>
<Ort>45555 Hamburg</Ort>
</Adresse>
<Kostenvoranschlag>30 000000</Kostenvoranschlag>
</Gruppe>
<Team>
<Name>Controlling</Name>
<Ansprechpartner>Werner Kostfix</Ansprechpartner>
<Telefon>030-4544332</Telefon>
</Team>

Wir können dann irgendeines der zahlreichen unter Auslesen eines XML Dokumentes mit XSLT angeführten Stylesheets verwenden, um zu testen, ob es tatsächlich funktionniert. Dieses Stylesheet zum Beispiel ermittelt alle Mitarbeiter und den dazugehörigen Ansprechpartner jeder der beiden Gruppen.

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="/Projekte/Gruppe"/>
</xsl:template>

<xsl:template match="Gruppe">
<table>
<xsl:apply-templates select="Kollegen/Mitarbeiter"/>
<xsl:apply-templates select="Ansprechpartner"/>
</table>
</xsl:template>

<xsl:template match="Mitarbeiter">
<tr><td>Mitarbeiter</td><td bgcolor="yellow" width="300"><xsl:value-of select="."/></td></tr>
</xsl:template>

<xsl:template match="Ansprechpartner">
<tr><td>Ansprechpartner</td><td bgcolor="orange" width="300"> <xsl:value-of select="."/></td></tr>
</xsl:template>
</xsl:stylesheet>

Transformation mittels eines Perl Skriptes

Völlig unabhängig davon, wie die XML Datei und wie das XSLT Stylesheet aussieht sieht der Perl Skrip, der die Transformation durchführt immer gleich aus, nämlich so.

use XML::LibXSLT;
use XML::LibXML;

my $XML_Objekt = XML::LibXML->new();
my $XSLT_Objekt = XML::LibXSLT->new();

my $die_XML_Datei = $parser->parse_file('Unternehmensberatung.xml');
my $die_XSLT_Datei = $parser->parse_file('test.xsl');

my $stylesheet = $XSLT_Objekt->parse_stylesheet($die_XSLT_Datei);
my $Ergebnisbaum = $stylesheet->transform($die_XML_Datei);
print $stylesheet->output_string($Ergebnisbaum);

Man kann die drei Dateien, also die XML Datei Unternehmensberatung.xml, das XSLT Stylesheet, also test.xsl und den Perl Skript in einem Ordner abspeichern, auf den der HTTP Server Zugriff hat und dann den Quellbaum direkt in den Browser schicken. Das Ergebnis sieht dann so aus.

vorhergehendes Kapitel