Ich habe eine XML-Datei ähnlich der folgenden und ich möchte die richtigen Teams und Spieler zusammen mit XSLT 1.0 gruppieren. Aber anstatt die richtigen Spieler unter ihren relevanten Teams anzuzeigen, werden alle Spieler unter allen Teams angezeigt.Muenchische Gruppierungsknoten auf verschiedenen Ebenen
Ich weiß, es hat verschiedene Knoten-Sets innerhalb des Wurzelelements, was möglicherweise der Grund ist, dass die Gruppierung nicht funktioniert, ich bin nicht einmal sicher, ob dies möglich ist, scheinen die Beispiele der Munchian-Gruppierung alle einen einzigen Knotensatz zu haben innerhalb des Wurzelelements.
Die XML
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="football.xslt"?>
<football>
<!-- team details go here -->
<teams>
<team teamCode="#ASNL">
<teamName>Arsenal</teamName>
<stadium>Emirates Stadium</stadium>
<location>North London</location>
</team>
<team teamCode="#NUTD">
<teamName>Newcastle United</teamName>
<stadium>St James' Park</stadium>
<location>Newcastle Upon Tyne</location>
</team>
</teams>
<!-- end of teams -->
<!-- player details go here -->
<players>
<player teamID="#ASNL">
<playerFirstName>Hector</playerFirstName>
<playerSurname>Bellerin</playerSurname>
<position>RB</position>
<goals>3</goals>
<assists>5</assists>
</player>
<player teamID="#ASNL">
<playerFirstName>Mesut</playerFirstName>
<playerSurname>Ozil</playerSurname>
<position>CAM</position>
<goals>10</goals>
<assists>20</assists>
</player>
<player teamID="#NUTD">
<playerFirstName>Papiss</playerFirstName>
<playerSurname>Cisse</playerSurname>
<position>CF</position>
<goals>15</goals>
<assists>5</assists>
</player>
<player teamID="#NUTD">
<playerFirstName>Tim</playerFirstName>
<playerSurname>Krul</playerSurname>
<position>GK</position>
<goals>0</goals>
<assists>3</assists>
</player>
</players>
<!-- end of players -->
</football>
Die XSLT
<?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"/>
<xsl:key name="teamKey" match="team" use="@teamCode"/>
<xsl:template match="/">
<xsl:for-each select="/football/teams/team[generate-id(.)=generate-id(key('teamKey', @teamCode)[1])]">
<xsl:sort select="teamName"/>
<teamDetails>
<br />
<b>Team Name: </b>
<xsl:value-of select="teamName"/>
<br />
<b>Stadium: </b>
<xsl:value-of select="stadium"/>
<br />
<b>Location: </b>
<xsl:value-of select="location"/>
<br />
</teamDetails>
<table>
<br />
<tr>
<th>First Name</th>
<th>Surname</th>
<th>Position</th>
<th>Goals</th>
<th>Assists</th>
</tr>
<xsl:for-each select="/football/players/player[key('teamKey', @teamID)]">
<tr>
<td>
<xsl:value-of select="playerFirstName"/>
</td>
<td>
<xsl:value-of select="playerSurname"/>
</td>
<td>
<xsl:value-of select="position"/>
</td>
<td>
<xsl:value-of select="goals"/>
</td>
<td>
<xsl:value-of select="assists"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Dies funktioniert gut, aber ich die relationale Schlüssel Methode bevorzugt. Vielen Dank – nod64