<html>
<head>
<title>&lt;xsl:attribute&gt;</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div id="Beschreibung">
<table cellpadding="0" cellspacing="0" border="0" width="100%" class="main">
<tr>
<td valign="top" class="NAME">&lt;xsl:attribute&gt;</td>
<td valign="top" class="COMPATIBILITY">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="divider"><img src="dwres:18084" width="100%" height="1"></td>
</tr>
<tr>
<td valign="top" colspan="2" class="description">
Diese Anweisung erm&ouml;glicht die Erstellung eines Attributs im Ausgabedokument. Der Vorteil von <span class="LITERAL">&lt;xsl:attribute&gt;</span> besteht darin, dass Sie aus Teilen des Eingabedokuments, aus hartkodiertem Text, aus von Funktionen zur&uuml;ckgegebenen Werten und anderen Werten, auf die Sie &uuml;ber das Stylesheet Zugriff haben, den Attributwert erstellen k&ouml;nnen.</td></tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Kategorie</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>Anweisung</p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Obligatorische Attribute</td>
</tr>
<tr>
<td colspan="2" class="description">
<dl>
<dt>
name
</dt>
<dd>
Das Attribut <span class="LITERAL">
name
</span> definiert den Namen des vom Element <span class="LITERAL">
&lt;
xsl:attribute
&gt;
</span> zu erstellenden Attributs. (Egal, wie man es ausdr&uuml;ckt, &uuml;ber die Attribute des Elements <span class="LITERAL">
&lt;
xsl:attribute
&gt;
</span> zu reden ist etwas verwirrend, oder?)
<P></p>
</dl>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Optionale Attribute</td>
</tr>
<tr>
<td colspan="2" class="description">
<dl>
<dt>
namespace
</dt>
<dd>
Das Attribut <span class="LITERAL">
namespace
</span> definiert den Namensraum-URI, der f&uuml;r dieses Attribut im Ausgabedokument verwendet werden soll. Sie haben keine Kontrolle &uuml;ber das verwendete Namensraum-Pr&auml;fix, denn mit dem Attribut <span class="LITERAL">
namespace
</span> legen Sie nur den URI des Namensraums fest.
<P></p>
</dl>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Inhalt</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>Eine XSLT-Vorlage. Anders ausgedr&uuml;ckt: den Inhalt eines Attributs k&ouml;nnen Sie mit den Elementen <span class="LITERAL">&lt;xsl:choose&gt;</span>, <span class="LITERAL">&lt;xsl:text&gt;</span> und <span class="LITERAL">&lt;xsl:value-of&gt;</span> erstellen. </p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">&Uuml;bergeordnetes Element</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>
<span class="LITERAL">&lt;xsl:attribute&gt;</span> erscheint innerhalb einer Vorlage.</p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Definition</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>XSLT-Abschnitt 7.1.3, Erzeugung von Attributen mit <span class="LITERAL">xsl:attribute</span>.</p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Beispiel</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>F&uuml;r dieses Beispiel soll aus dem folgenden XML-Dokument eine HTML-Tabelle erstellt werden:</p>
<span class="PROGRAMLISTING"><pre>
&lt;?xml version="1.0"?&gt;
&lt;list xml:lang="en"&gt;
  &lt;title&gt;Albums I've bought recently:&lt;/title&gt;
  &lt;listitem&gt;The Sacred Art of Dub&lt;/listitem&gt;
  &lt;listitem&gt;Only the Poor Man Feel It&lt;/listitem&gt;
  &lt;listitem&gt;Excitable Boy&lt;/listitem&gt;
  &lt;listitem xml:lang="sw"&gt;Aki Special&lt;/listitem&gt;
  &lt;listitem xml:lang="en-gb"&gt;Combat Rock&lt;/listitem&gt;
  &lt;listitem xml:lang="zu"&gt;Talking Timbuktu&lt;/listitem&gt;
  &lt;listitem xml:lang="jz"&gt;The Birth of the Cool&lt;/listitem&gt;
&lt;/list&gt;</pre></span>
<p>Es wird eine Tabelle erstellt, die in einer eigenen Zeile in der rechten Spalte der Tabelle je ein <span class="LITERAL">&lt;listitem&gt;</span> aufnimmt und links eine eigene Zelle hat mit <span class="LITERAL">rowspan</span> gleich der Anzahl an <span class="LITERAL">&lt;listitem&gt;</span>-Elementen im XML-Dokument. Selbstverst&auml;ndlich k&ouml;nnen wir den Wert f&uuml;r das Attribut <span class="LITERAL">rowspan</span> nicht hart kodieren, da sich die Anzahl an Listenelementen (<span class="LITERAL">&lt;listitem&gt;</span>) &auml;ndern kann. Das folgende Stylesheet verwendet <span class="LITERAL">&lt;xsl:attribute&gt;</span>, um die gew&uuml;nschten Effekte zu erzielen:</p>
<span class="PROGRAMLISTING"><pre>
&lt;?xml version="1.0"?&gt;
&lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;

  &lt;xsl:output method="html"/&gt;

  &lt;xsl:template match="/"&gt;
    &lt;html&gt;
      &lt;head&gt;
        &lt;title&gt;&lt;xsl:value-of select="list/title"/&gt;&lt;/title&gt;
      &lt;/head&gt;
      &lt;body&gt;
        &lt;xsl:apply-templates select="list"/&gt;
      &lt;/body&gt;
    &lt;/html&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match="list"&gt;
    &lt;table border="1" width="75%"&gt;
      &lt;tr&gt;
        &lt;td bgcolor="lightslategray" width="100" align="right"&gt;
          &lt;xsl:attribute name="rowspan"&gt;
            &lt;xsl:value-of select="count(listitem)"/&gt;
          &lt;/xsl:attribute&gt;
          &lt;p style="font-size: 125%"&gt;
            &lt;xsl:value-of select="title"/&gt;
          &lt;/p&gt;
        &lt;/td&gt;
        &lt;td&gt;
          &lt;xsl:value-of select="listitem[1]"/&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;xsl:for-each select="listitem"&gt;
        &lt;xsl:if test="position() &gt; 1"&gt;
          &lt;tr&gt;
            &lt;td&gt;
              &lt;xsl:value-of select="."/&gt;
            &lt;/td&gt;
          &lt;/tr&gt;
        &lt;/xsl:if&gt;
      &lt;/xsl:for-each&gt;
    &lt;/table&gt;
  &lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;</pre></span>
<p>Hier das generierte HTML-Dokument:</p>
<span class="PROGRAMLISTING"><pre>
&lt;html&gt;
&lt;head&gt;
&lt;META http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
&lt;title&gt;Albums I've bought recently:&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;table width="75%" border="1"&gt;
&lt;tr&gt;
&lt;td align="right" width="100" rowspan="7" bgcolor="lightslategray"&gt;
&lt;p style="font-size: 125%"&gt;Albums I've bought recently:&lt;/p&gt;
&lt;/td&gt;&lt;td&gt;The Sacred Art of Dub&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Only the Poor Man Feel It&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Excitable Boy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aki Special&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Combat Rock&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Talking Timbuktu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The Birth of the Cool&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></span>
<p>Beachten Sie, dass im Element <span class="LITERAL">&lt;td&gt;</span> mehrere Attribute hart kodiert sind. Diese Attribute werden mit dem von <span class="LITERAL">&lt;xsl:attribute&gt;</span> erzeugten Attribut kombiniert. Es d&uuml;rfen beliebig viele <span class="LITERAL">&lt;xsl:attribute&gt;</span>-Elemente vorkommen, doch m&uuml;ssen sie als Erstes innerhalb des Elements erscheinen, in das Sie Attribute einf&uuml;gen. In <link linkend="xslt-appa-a3">Abbildung A-3</link> sehen Sie, wie das erzeugte HTML-Dokument aussieht.</p>
<figure label="A-3" id="xslt-appa-a3">
        <p class="TITLE">Dokument mit generierten Attributen</p>
        <graphic depth="231" width="405" fileref="figs/xslt.aa03.gif"/></figure>
<p>Sie sollten sich dar&uuml;ber bewusst sein, dass in diesem Fall auch eine Attribut-Wert-Vorlage h&auml;tte verwendet werden k&ouml;nnen. Den Wert des Attributs <span class="LITERAL">rowspan</span> k&ouml;nnten Sie auch wie folgt erzeugen:</p>
<span class="PROGRAMLISTING"><pre>
&lt;td bgcolor="lightslategray" rowspan="{count(listitem)}"
  width="100" align="right"&gt;</pre></span>
<p>Der Ausdruck in geschweiften Klammern (<span class="LITERAL">{}</span>) wird ausgewertet und durch sein Ergebnis ersetzt. In diesem Fall gibt <span class="LITERAL">count(listitem)</span> die Nummer <span class="LITERAL">7</span> zur&uuml;ck. Diese Zahl wird als Wert f&uuml;r das Attribut <span class="LITERAL">rowspan</span> verwendet.</p>
</td>
</tr>
</table>
</div>
</body>
</html>
