André Laugks: xsl:if

Beitrag lesen

Hallo!

Folgende XMl-Datei ist gegeben. Mit einem XSL-template möchte ich nur das element mit der id 13 auswählen.

// ---------- xml-Datei --------------
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="name.xsl"?>
<adressbuch>
 <eintrag id="1">
  <vorname>Andre</vorname>
  <nachname>Laugks</nachname>
  <email>andre.laugks@netcologne.de</email>
 </eintrag>
 <eintrag id="13">
  <vorname>Thomas</vorname>
  <nachname>Otto</nachname>
  <email>thomas.otto@gmx.de</email>
 </eintrag>
 <eintrag id="7">
  <vorname>Werner</vorname>
  <nachname>Schmitz</nachname>
  <email>werner.schmitz@web.de</email>
 </eintrag>
</adressbuch>

Mit dem folgenden XSL-Template wird mir der Vorname des Eintrages 13 ausgewählt, aber die id des ersten "eintrag" Elementes.

// ---------- XSL-Template --------------
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" indent="yes"/>
 <xsl:template match="/adressbuch">
  <html>
   <body>
    <table border="1">
     xsl:apply-templates/
    </table>
   </body>
  </html>
 </xsl:template>

<xsl:template match="eintrag">
  <xsl:if test="@id = 13">
   <tr>
    <xsl:apply-templates select="vorname"/>
   </tr>
  </xsl:if>
 </xsl:template>

<xsl:template match="vorname">
  <td>
   <xsl:value-of select="."/>
  </td>
  <td>
   <xsl:value-of select="/adressbuch/eintrag/@id"/>
  </td>
 </xsl:template>

</xsl:stylesheet>

// ---------- XSL-Template --------------
<html><body>
      <table border="1">
         <tr>
            <td>Thomas</td>
            <td>1</td>
         </tr>
      </table>
</body></html>

Warum wird mir die id des ersten "eintrag" Elementes ausgewählt. Das Templaterule wird doch nur aufgerufen, wenn die id=13 ist, was man ja am Vornamen sieht.

Schreibe ich aber das Template folgendermaßen um, funktioniert es. Wieso?

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" indent="yes"/>
 <xsl:template match="/adressbuch">
  <html>
   <body>
    <table border="1">
     xsl:apply-templates/
    </table>
   </body>
  </html>
 </xsl:template>

<xsl:template match="eintrag">
  <xsl:if test="@id = 13">
   <tr>
    <td><xsl:value-of select="vorname"/></td>
    <td><xsl:value-of select="@id"/></td>
   </tr>
  </xsl:if>
 </xsl:template>

</xsl:stylesheet>

// ---------- Ergebnis --------------
<html><body>
      <table border="1">
         <tr>
            <td>Thomas</td>
            <td>13</td>
         </tr>
      </table>
</body></html>

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