www.xml-xslt.de


Startseite

Das Buch

Auszeichnungssprachen

XML-Dokument

Struktur: dtd

Retrieval: XSLT
Grundbegriffe
Daten selektieren
Vorlagen anlegen
Vorlagen aufrufen
Elementinhalte ausgeben
Attributinhalte ausgeben
Pfadangaben

9.2.4    Inhalt von Attributen ausgeben

Neben der Ausgabe von Elementwerten in ein Zieldokument (oder die Ausgabe am Bild-schirm im Browser) ist auch die Ausgabe von Attributwerten ein wichtiger Aspekt von XSLT-Dokumenten. In dem folgenden Quelldokument sollen nun nicht nur Autornamen sondern auch die Kategorie der schriftstellerischen Tätigkeit ausgegeben werden:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="books_work.xsl"?>
<buecher>
    <buch kategorie="referenzwerk">
        <autor>Doug Tidwell</autor>
        <titel>XSLT. XML-Dokumente transformieren</titel>
        <preis waehrung="€">40</preis>
    </buch>
    <buch kategorie="belletristik">
        <autor>Nicola Dixen</autor>
        <titel>Linvarna</titel>
        <preis waehrung="DKK">215,75</preis>
    </buch>
    <buch kategorie="belletristik">
        <autor>Herman Melville</autor>
        <titel>Moby Dick</titel>
        <preis waehrung="$">8.99</preis>
    </buch>
    <buch kategorie="belletristik">
        <autor>J. R. R. Tolkien</autor>
        <titel>The Lord of the Rings</titel>
        <preis waehrung="$">22.99</preis>
    </buch>
</buecher>


Zur Ausgabe des Attributs wird das Element <xsl:value-of select=""/> verwendet. Der Attribut-wert von select ist dabei der Name des Attributs mit einem vorangestellten  @:

<xsl:value-of select="@kategorie"/>

Dieser Attributwert kann ausgelesen werden, wenn der Standort der aktuellen Vorlage das Element buch ist, denn hier ist das Attribut kategorie enthalten. Im folgenden Beispiel wird darüber hinaus die Ausgabe des Attributes kategorie in Klammer gesetzt – zur besse-ren Lesbarkeit im Text:

<?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="/">
    <html>
        <head>
            <title>Autorenverzeichnis</title>
        </head>
        <xsl:apply-templates/>
    </html>
</xsl:template>
<xsl:template match="buecher">
    <body>
        <h2>Das Autorenverzeichnis der Website</h2>
            <xsl:apply-templates/>
    </body>
</xsl:template>
<xsl:template match="buch">
    <p>
       <xsl:apply-templates select="autor"/>
     (<xsl:value-of select="@kategorie"/>)
     </p>
</xsl:template>
<xsl:template match="autor">
    <xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>


Attributwertvorlagen
Im folgenden Quelldokument ist zusätzlich die Website der Autoren als Attribut vermerkt:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="books_work.xsl"?>
<buecher>
    <buch kategorie="referenzwerk">
        <autor url="www.tidwell.com">Doug Tidwell</autor>
        <titel>XSLT. XML-Dokumente transformieren</titel>
        <preis waehrung="€">40</preis>
    </buch>
    <buch kategorie="belletristik">
        <autor url="www.dixen.com">Nicola Dixen</autor>
        <titel>Linvarna</titel>
        <preis waehrung="DKK">215,75</preis>
    </buch>
    <buch kategorie="belletristik">
        <autor url="www.melville.com">Herman Melville</autor>
        <titel>Moby Dick</titel>
        <preis waehrung="$">8.99</preis>
    </buch>
    <buch kategorie="belletristik">
        <autor url="www.tolkien.com">J. R. R. Tolkien</autor>
        <titel>The Lord of the Rings</titel>
        <preis waehrung="$">22.99</preis>
    </buch>
</buecher>


Diese Autorinformation soll im Zieldokument (HTML) als ein klickbarer Link erscheinen. Damit muss die Ausgangsinformation <autor url=”www.dixen.com”> in die Zielinformation <a href=”http://www.dixen.com”> transformiert werden. Der Attributwert des Elements autor im Aus-gangsdokument wird zu einem Attributwert im Zieldokument. Dieses Vorgehen unter-scheidet sich von der obigen Lösung, bei der ein Attributwert in einem Element des Quelldokuments in normalen Text im Zieldokument umgewandelt wurde. Folgende Lösung für das Auslesen eines Attributwerts in einen anderen Attributwert, die in Analogie an den obigen Ansatz erstellt wurde, drängt sich daher auf, ist aber falsch!

<a href=”http:<xsl:value-of select=”@url”>”>

Diese Lösung kann nicht gewählt werden, da die Verschachtelung eines Elements in ein geöffnetes Elementzeichen die Wohlgeformtheitskriterien von XML verletzen würde – und das XSLT-Dokument muss ja wohlgeformtes (und valides) XML sein.


    Zum Auslesen von Attributwerten aus dem Quelldokument in Attributwerte im Zieldokument steht daher die sog. Attributwertvorlage zur Verfügung. Ein Attributwert des Quelldokuments kann im konkreten Beispiel durch die Syntax {@url} in das Zieldokument ausgelesen werden. Zu beachten ist dabei der aktuelle Standort, der ggf. in der Wahl des Attributs durch einen Ausdruck in XPath erweitert werden muss (vgl. Kapitel über XPath).

    Das folgende Stylesheet liest die Attributwerte des Quelldokuments (Attribut url) in ein Attribut href im Zieldokument aus:
    
<?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="/">
    <html>
        <head>
            <title>Autorenverzeichnis</title>
        </head>
        <xsl:apply-templates/>
    </html>
</xsl:template>
<xsl:template match="buecher">
    <body>
        <h2>Das Autorenverzeichnis der Website</h2>
            <xsl:apply-templates/>
    </body>
</xsl:template>
<xsl:template match="buch">
    <p>
    <xsl:apply-templates select="autor"/>
     (<xsl:value-of select="@kategorie"/>)
     </p>
</xsl:template>
<xsl:template match="autor">
    <a href="http://{@url}"><xsl:value-of select="."/></a>
</xsl:template>
</xsl:stylesheet>

Ein internetfähiger Browser mit XSLT-Transformationsmöglichkeit produziert folgenden Output:

Die Quelle des produzierten Dokuments (HTML) zeigt dabei die korrekte Transformation der Attributwerte:

<html>
   <head>
     <meta http-equiv="Content-Type" content="text/html;>
      <title>Autorenverzeichnis</title>
   </head>
  <body>
   <h2>Das Autorenverzeichnis der Website</h2>
    <p><a href="http://www.tidwell.com">Doug Tidwell</a>(referenzwerk)
     </p>
    <p><a href="http://www.dixen.com">Nicola Dixen</a>(belletristik)
     </p>
    <p><a href="http://www.melville.com">Herman Melville</a>(belletristik)
     </p>
    <p><a href="http://www.tolkien.com">J. R. R. Tolkien</a>(belletristik)
     </p>
  </body>
</html>



 
 
 
 
 
 
 
 
 
 

Das XML/XSLT-Seminar
(zur Zeit als Buch nicht lieferbar)