Andr㩠augks: Auf Attribut zugreifen, ohne <xsl:attribute>

Hallo!

Ich habe gelesen, daß ich folgendermaßen auf ein Attribut eines Elementes zugreifen kann.

----------- attr.xml -------------
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet href="attr.xsl" type="text/xsl"?>
<adressen>
 <name id="1">Otto</name>
 <name id="5">Manfred</name>
</adressen>

----------- attr.xsl -------------
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html"  indent="yes"/>
  <xsl:template match="/adressen">
   <html>
    <body>
     xsl:apply-templates/
    </body>
   </html>
  </xsl:template>

<xsl:template match="name">
   {@id}<br/>
  </xsl:template>
</xsl:stylesheet>

Ich bekomme aber

<html>
<body>
{@id}<br/>
{@id}<br/>
</body>
</body>

angezeigt.

XSLT-Prozessor: Saxon 6.5 Instant

MfG, André Laugks
L-Andre @ gmx.de

  1. Hi,

    <xsl:template match="name">

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

    </xsl:template>

    Andreas

    1. Hallo!

      Ja, Danke, funktioniert!

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

      Von xsl:value-of stand da aber nichts.

      Da werde ich doch mal direkt bei dem Autor nachfragen. Da stand das so, wie ich es probiert habe, also nur {@id}.

      MfG, André Laugks
      L-Andre @ gmx.de

      1. <xsl:value-of select="@id"/><br/>

        Von xsl:value-of stand da aber nichts.

        Da werde ich doch mal direkt bei dem Autor nachfragen. Da stand das so, wie ich es probiert habe, also nur {@id}.

        Das verwechselst du mit Attributwert-Vorlagen, innerhalb eines Ergebnisbaumfragments kannst du innerhalb von Attributwerten mittels geschweiften Klammern dafür sorgen, dass der Attributinhalt als Vorlage statt als fixe Zeichenkette interpretiert wird, also

        <xhtml:a href = '{@src}'>...</xhtml:a>

        würde den Wert des src-Attributs des Kontextknotens in den Wert des href-Attributs des a-Elements im Zielbaum kopieren, das ist die Alternative zu xsl:attribut, damit hättest du schreiben müssen

        xhtml:a
          <xsl:attribute name = 'href'>
            <xsl:value-of select = '@src' />
          </xsl:attribute>
          ...
          </xhtml:a>

        was vor allem bei vielen Attributen schnell unlesbar wird.

        1. Hallo!

          Das verwechselst du mit Attributwert-Vorlagen, innerhalb eines Ergebnisbaumfragments kannst du innerhalb von Attributwerten mittels geschweiften Klammern dafür sorgen, dass der Attributinhalt als Vorlage statt als fixe Zeichenkette interpretiert wird, also

          <xhtml:a href = '{@src}'>...</xhtml:a>

          Genau, und dafür suche ich ein funktionstüchtiges Beispiel. Ich will mir das einfach mal kompieren und ausprobieren.

          Ich finde xsl:attribute unübersichtlich, wenn man mehrere Attribute hat.

          MfG, André Laugks
          L-Andre @ gmx.de

          1. Hallo Andre,

            <xhtml:a href = '{@src}'>...</xhtml:a>
            Genau, und dafür suche ich ein funktionstüchtiges Beispiel. Ich will mir das einfach mal kompieren und ausprobieren.

            Kapitel 6.

            Grüße
            Thomas
            ---------
            <?xml version="1.0" encoding="iso-8859-1"?>
            <?xml-stylesheet href="Kap6-03.xsl" type="text/xsl"?>
            <spielplan>
              <bild>
                <name>Friedrich Schiller</name>
                <quelle>../img/schiller.jpg</quelle>
              </bild>
              <eintrag>
                <titel url="http://www.gutenberg.net/raeuber.html">Die Räuber</titel>
                <autor>Friedrich Schiller</autor>
                <premiere>17.09.2002</premiere>
                <ausverkauft/>
              </eintrag>
              <eintrag>
                <titel url=" http://www.gutenberg.net/faust.html">Faust</titel>
                <autor>Johann Wolfgang Goethe</autor>
                <premiere>20.10.2002</premiere>
              </eintrag>
              <eintrag>
                <titel url=" http://www.gutenberg.net/sommernachtstraum.html">Ein Sommernachtstraum</titel>
                <autor>William Shakespeare</autor>
                <premiere>02.11.2002</premiere>
              </eintrag>
              <eintrag>
                <titel url=" http://www.gutenberg.net/krug.html">Der zerbrochene Krug</titel>
                <autor>Heinrich von Kleist</autor>
                <premiere>17.12.2002</premiere>
                <ausverkauft/>
              </eintrag>
            </spielplan>
            ------------------
            <?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>Spielplan Theater Fridolin</title>
                  </head>
                  <body>
                    <h1>Spielplan</h1>
                    <img src="{spielplan/bild/quelle}" alt="{spielplan/bild/name}" border="0"/><br/><br/>
                    <table border="1">
                      <tr>
                        <th>Titel</th>
                        <th>Autor</th>
                        <th>Premiere</th>
                      </tr>
                      <xsl:apply-templates select="spielplan/eintrag"/>
                    </table>
                  </body>
                </html>
              </xsl:template>
              <xsl:template match="eintrag">
                <tr>
                  xsl:apply-templates/
                </tr>
              </xsl:template>
              <xsl:template match="autor | premiere">
                <td>xsl:apply-templates/</td>
              </xsl:template>
              <xsl:template match="titel">
                  <td>
                    <a>
                      <xsl:attribute name="href">
                        <xsl:value-of select="@url"/>
                      </xsl:attribute>
                      xsl:apply-templates/
                    </a>
                  </td>
              </xsl:template>

            </xsl:stylesheet>