Hallo!
Ich habe ein XML-Dokument(Beispiel) mit folgenden Aufbau. Das Element "telefon" kann eine beliebige Anzahl an Kindelemente z.B. "nr" haben.
Ich möchte alle Elemente "nr" ausgeben.
// XML-dokument
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="test.xsl" type="text/xsl"?>
<adressbuch>
<adresse>
<name>Sven</name>
<telefon>
<nr>S. 1</nr>
<nr>S. 2</nr>
<modil>s. M. 1.</modil>
</telefon>
</adresse>
<adresse>
<name>Tom</name>
<telefon>
<nr>T. 1</nr>
<nr>T. 2</nr>
<nr>T. 3</nr>
<mobil>T. M. 1.</mobil>
</telefon>
</adresse>
</adressbuch>
// Ausschnitt aus XSL-Template, das gesamte am Ende
Wenn ich diese Definition verwende, werden mir alle "nr" Elemente plus das "mobil" Element ausgegeben.
<xsl:template match="telefon/nr">
<xsl:value-of select="."/><br/>
</xsl:template>
Mit folgender Definition bekomme ich nur das erste "nr" Element ausgegeben.
<xsl:template match="telefon">
<xsl:value-of select="nr"/><br/>
</xsl:template>
Verwende ich eine Schleife, bekomme ich alle "nr" Elemente ausgegeben.
<xsl:template match="telefon">
<xsl:for-each select="nr">
<xsl:value-of select="."/><br/>
</xsl:for-each>
</xsl:template>
Mhhhhh, wo habe ich ein Verstandnisproblem? Das mit der Schleife ist mir klar. Bei den anderen beiden Definitionen komme ich aber nicht ganz mit.
MfG, André Laugks
L-Andre @ gmx.de
-----------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/adressbuch">
<html>
<body>
<table border="1">
xsl:apply-templates/
</table>
</body>
</html>
</xsl:template>
<xsl:template match="adresse">
<tr>
<td><xsl:apply-templates select="name"/></td>
<td><xsl:apply-templates select="telefon"/></td>
</tr>
</xsl:template>
<xsl:template match="name">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="telefon/nr">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>