XSL/ XSLT Workshop Teil 3

XSL/ XSLT WorkshopIm dritten Teil des XSL/ XSLT Workshops lernen Sie kennen, wie man Daten mit XSL filtert, und Sie werden in die Sortier – Anweisung
von XSL eingeführt.

Manchmal ist es notwendig, nur bestimmte Datenteile herauszufiltern
Hierfür haben Sie bereits im ersten Teil des XSL Workshops
die <xsl:for-each> Anweisung kennen gelernt.
Diese kann man so erweitern, das man bestimmte XML Daten ausfiltern
kann. Als erstes Beispiel wählen wir eine XML Buchdatenbank,
in der der Titel eines Buches, der Name des Autors, und der Verlag
gespeichert sind.

buch.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="buch.xsl"?>
<buch_db>
<buch>
<titel>Jetzt lerne ich - XML</titel>
<autor>Günter Born</autor>
<verlag>MUT</verlag>
</buch>
<buch>
<titel>Programmieren lernen</titel>
<autor>Ignatz Schelz</autor>
<verlag>MUT</verlag>
</buch>
<buch>
<titel>XML - Das Einsteigerseminar</titel>
<autor>Michael Seeboerger-Weichselbaum</autor>
<verlag>BHV</verlag>
</buch>
<buch>
<titel>SVG - Das Einsteigerseminar</titel>
<autor>Helma Spoona</autor>
<verlag>BHV</verlag>
</buch>
</buch_db>

Wie Sie in der XML Datei sehen, taucht der Name des Verlags öfters
auf. Nun will ein Besucher z.B. nur die Bücher aus dem MUT
Verlag sehen. Sie könnten einerseits ein eigenes XML Dokument
für die Bücher des MUT Verlags anlegen, oder einfach die
Daten herausfiltern.
Über das folgende XSL Stylesheet werden nur die Bücher
angezeigt, die auch im MUT Verlag erschienen sind.

buch.xsl

<?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="buch_db">
<html>
<head>
<title>Buch.xsl</title>
</head>
<body>
<xsl:for-each select="buch[verlag='MUT']">
<xsl:value-of select="titel" /><br />
<xsl:value-of select="autor" /><br />
<xsl:value-of select="verlag" /><br /><br
/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Die Ausgabe im Browser (IE 6.0) sieht wie folgt aus:

Gefilterte Daten mit XSL
Gefilterte Daten mit XSL

Der Schlüssel liegt wie schon gesagt in <xsl:for-each>
Anweisung.

<xsl:for-each select="buch[verlag='MUT']">
</xsl:for-each>

Hier wird durch die Angabe im select="" Teil nur die Daten
der Bücher ausgegeben, deren Verlag MUT ist. Dabei ist buch
der Verweis auf das Element <buch>.

Der Filter kann auch anders gestaltet werden:

buch[verlag!='MUT']
Alle Bücher werden angezeigt, bei denen der Verlag nicht
MUT ist.
Es stehen noch weitere sogenannte Wahrheitsoperatoren zur Verfügung.

Die XSL Wahrheitsoperatoren

= ist gleich
!= nicht gleich
&lt; weniger als
&gt; größer als

Die Operatoren &lt; und &gt; lassen sich jedoch nur wirklich
sinnvoll auf Ganzahlen anwenden.

Sortieren der Daten

Wir greifen das Beispiel von oben nochmals auf, und wollen jetzt
die Bücher nach den Verlagen sortieren. Dabei sollen die Verlage
nach dem ABC sortiert werden. Das kann mit dem XSL Befehl <xsl:sort
/>

Befehl erreicht werden.

Das XSL Stylesheet:

<?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="buch_db">
<html>
<head>
<title>Buch.xsl</title>
</head>
<body>
<xsl:for-each select="buch">
<xsl:sort select="verlag" order="ascending"/>
<xsl:value-of select="titel" /><br />
<xsl:value-of select="autor" /><br />
<xsl:value-of select="verlag" /><br /><br
/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Über den <xsl:sort /> Befehl werden die
Inhalte nach dem Verlag sortiert. Über den order=""
Befehl können Sie die Reihenfolge bestimmen.

ascending Absteigend
descending Aufsteigend

Desweiteren kann dem Element die Attribute

Attribut Werte Erklärung
case-order upper-first | lower-first Ob Großbuchstaben vor oder nach Kleinbuchstaben
kommen.
data-type text | number | qname Der Datentyp nach dem sortiert wird. qname verweist
auf einen selbst generierten Datentyp.

Die Sortieranweisung kann mitunter sehr komplex sein. Hierzu wird
in den nächsten Wochen ein eigener Artikel veröffentlicht.

This entry was posted in XML. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *