| 
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.
|
 |