DevTrain

Autor: Andreas Rauch

Listen nach eignen Geschmack - Auflistungen mit XSL

Immer wieder das gleiche. Da denkt man nun hat XML und XSL alles was man braucht und nun möchte man Datensätze ordentlich auflisten, mit Nummerierung usw.. Aber wie? Logisch XSL. Der dementsprechende Befehl lautet:

<xsl:number>

Aus unserem XML File suchen wir die zu listenden Werte via einem template aus. Unsere Aufzählungszeichen können entweder numerisch (1., 2.) oder alphabetisch  (A., B.) sein.

So nun wollen wir das ganze noch nach unseren eigenen Willen formatieren.
Das erledigt für uns das Attribut:

<xsl:number format="" grouping-separator=""  grouping-size=""  >

also...

Format
format="1." oder format="A.". Dabei ist es so ziemlich egal, was nach "1" oder "A" kommt, also etwas in der Art "1.)" oder "A--". Sofern man ungültige Zeichen eingibt, stellt sich automatisch die Formatierung auf numerisch um.

Sonderzeichen
Sonderzeichen hingegen haben zumindest in der MS Welt ihr eigenes Leben. Aus ein format="@" wird in der Liste: @1@. Das heißt, das angebene Format umschließt die Nummerierung.
Möchte man führende Nullen haben, so formatieren wir wie folgt:
format="01."

Trennzeichen

<xsl:number  grouping-separator=""  grouping-size=""    format="">

Falls Wir längere Liste bekommen, so können wir auch Trennzeichen einführen. Mit Hilfe von  grouping-size="3"
grouping-separator="." bauen wir unser deutsches Tausender Trennzeichen Format nach.

Also nun zum Beispiel:

 

Unsere Liste soll abhängig von der Position der gefundenen Daten nummeriert sein und eine führende "0" haben , sowie ein "." als Tausendertrennzeichen.

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

<xsl:template match="items">
   <xsl:for-each select="item">
      <xsl:sort select="."/>
      <xsl:number value="position()" format="01.) " grouping-separator="."  grouping-size="3" />
      <xsl:value-of select="."/>,
    <br/>
   </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

und hier das XML File:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="numelem.xsl" ?>

<
items>
<item>Andreas</item>
<item>Thomas</item>
<item>Anton</item>
<item>Volkmar</item>
<item>Tom</item>
<item>Sonja K</item>
<item>Hans</item>
<item>Wolfgang</item>
<item>Sonja S</item>
</
items>

Quiz: Was passiert, wenn wir statt position() einfach den value als "3" angeben?

Antwort:
Würden wir anstatt postion() einfach eine Beliebige Zahl angeben wie value="3" bekommen wir nur "C."s oder "3."er zurück.

 

Die Beipiele gibts zum runterladen...

 

Also auf gehts' gleich testen.


Erfasst am: 16.08.2001 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=523
© Copyright 2003 ppedv AG - http://www.ppedv.de