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