André Laugks: variable Anzahl von Kindelementen ausgeben

Beitrag lesen

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>