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.

Bookmark setzen... These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Bloglines
  • MisterWong
  • MySpace
  • Reddit
  • SEOigg
  • Technorati
  • TwitThis
  • Y!GG
  • Google Bookmarks

Weiterführende Links: