Problem mit gleichen Tags in xsl
Mona
- xml
- xsl
1 Gunnar Bittersmann0 Mona
1 beatovich2 ThomasM0 Mona
Hallo, ich habe nicht wirklich viel Ahnung von xml bzw. xsl. Wir machen das gerade in der Schule. Ich habe ein xml Dokument zu einem Fussballspiel bekommen und soll eine xsl Datei dazu schreiben. Jetzt habe ich das Problem, dass mir bei mehreren gleichen Tags nur der erste angezeigt wird.
Ausschnitt im xml Dokument:
<Aufstellung>
<AufstellungHeim>
<Spieler>Kevin Trapp</Spieler>
<Spieler>Florian Dick</Spieler>
<Spieler>Martin Amedick</Spieler>
<Spieler>Rodnei</Spieler>
</AufstellungHeim>
</Aufstellung>
Ausschnitt im xsl Dokument:
<h2><u>Aufstellung</u></h2>
<table>
<h3>Aufstellung des <xsl:value-of select="Fussballspiel/Heim"/></h3>
<xsl:for-each select="Fussballspiel/Aufstellung/AufstellungHeim">
<tr>
<td><xsl:value-of select="Spieler"/></td>
</tr>
</xsl:for-each>
</table>
So wird mir im Browser nur der erste Spieler "Kevin Trapp" angezeigt. Ich würde mir aber gerne alle Spieler, am besten untereinander, anzeigen lassen.
Gewünscht:
Aufstellung
Aufstellung des 1.FcKaiserslautern
Kevin Trapp
Florian Dick
Martin Amedick
Rodnei
Ich hoffe die Informationen reichen und ich habe mein Problem richtig erläutert. Danke für die Hilfe :)
@@Mona
Hallo, ich habe nicht wirklich viel Ahnung von xml bzw. xsl. Wir machen das gerade in der Schule.
Habt ihr das was von xsl:template
gehört?
LLAP 🖖
Ja, ich habe es auch versucht. Ich habe gelesen, dass es irgendwie mit <xsl:value-of select="." />
funktionieren soll, aber dann wird der komplette Text hintereinander und ohne Formatierung angezeigt.
hallo
<Aufstellung> <AufstellungHeim> <Spieler>Kevin Trapp</Spieler> <Spieler>Florian Dick</Spieler> <Spieler>Martin Amedick</Spieler> <Spieler>Rodnei</Spieler> </AufstellungHeim> </Aufstellung>
Ausschnitt im xsl Dokument:
<h2><u>Aufstellung</u></h2> <table> <h3>Aufstellung des <xsl:value-of select="Fussballspiel/Heim"/></h3> <xsl:for-each select="Fussballspiel/Aufstellung/AufstellungHeim">
Keine Ahnung von xsl
Aber Fussballspiel/Aufstellung/AufstellungHeim hast du nur 1 (eins)
während du aber wohl über
Fussballspiel/Aufstellung/AufstellungHeim/Spieler
iterieren willst
<tr> <td><xsl:value-of select="Spieler"/></td> </tr> </xsl:for-each>
</table>
So wird mir im Browser nur der erste Spieler "Kevin Trapp" angezeigt. Ich würde mir aber gerne alle Spieler, am besten untereinander, anzeigen lassen.
Hallo Mona,
Ausschnitt im xsl Dokument:
<h2><u>Aufstellung</u></h2> <table> <h3>Aufstellung des <xsl:value-of select="Fussballspiel/Heim"/></h3> <xsl:for-each select="Fussballspiel/Aufstellung/AufstellungHeim"> <tr> <td><xsl:value-of select="Spieler"/></td> </tr> </xsl:for-each> </table>
So wird mir im Browser nur der erste Spieler "Kevin Trapp" angezeigt. Ich würde mir aber gerne alle Spieler, am besten untereinander, anzeigen lassen.
Das xsl:for-each müsste auf Spieler zeigen und dann können die jeweiligen Textknoten via . oder text() ausgelesen werden:
<xsl:for-each select="Fussballspiel/Aufstellung/AufstellungHeim/Spieler">
<tr>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
Statt der Tabelle bietet sich evtl. eine Liste an (ul/li) und h3 ist kein Kindelement von table.
Alternativ lässt sich mit mehreren Templates arbeiten, hier die Listenvariante:
<xsl:template match="Fussballspiel">
<h3><xsl:value-of select="Heim"/></h3>
<ul>
<xsl:apply-templates select="Aufstellung/AufstellungHeim/Spieler"/>
</ul>
</xsl:template>
<xsl:template match="Spieler">
<li><xsl:value-of select="."/></li>
</xsl:template>
Grüße,
Thomas
Hallo Thomas,
Jetzt hat es funktioniert vielen Dank für die Hilfe und die Verbesserungsvorschläge!