komplzierte (!?) Abfrage
dey
- xsl
Hallo,
ich habe mich ein wenig in den Hierachien meiner XML-Datei verlaufen.
Auszug aus meiner XML-Datei:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="game.xsl"?>
<all_games>
<game gid="4" match="Hallenturnier in Floersheim" yy="05" mm="01" dd="15">
<result>7. Platz</result>
<report_h>- 7. Platz -</report_h>
<all_players>
<player name="Spieler1">
<goals>3</goals><goalkee></goalkee>
</player>
<player name="Spieler">
<goals>0</goals><goalkee></goalkee>
</player>
Ich möchte jetzt gerne alle Spiele an denen ein bestimmter Spieler teilgenommen hat:
Wie komme ich an diese Werte
bydey
Hi,
<game gid="4" match="Hallenturnier in Floersheim" yy="05" mm="01" dd="15">
<result>7. Platz</result>
<report_h>- 7. Platz -</report_h>
<all_players>
<player name="Spieler1">
<goals>3</goals><goalkee></goalkee>
</player><player name="Spieler">
<goals>0</goals><goalkee></goalkee>
</player>Ich möchte jetzt gerne alle Spiele an denen ein bestimmter Spieler teilgenommen hat:
- ich kann die Spiele herausfiltern
<xsl:for-each select="//all_games/game/all_players/player[@name = $name]">
Du willst also nicht den Spieler, sondern ein Spiel selektieren.
Also darfst Du auch nur das Spiel selektieren - das mit den Spielern gehört in die [].
Also eher so:
<xsl:for-each select="//all_games/game[all_players/player@name = $name]">
(ungetestet)
cu,
Andreas
Hallo Mudguard,
Du willst also nicht den Spieler, sondern ein Spiel selektieren.
Also darfst Du auch nur das Spiel selektieren - das mit den Spielern gehört in die [].Also eher so:
<xsl:for-each select="//all_games/game[all_players/player@name = $name]">(ungetestet)
Die Test-Antwort lautet:
Erwartetes Token ']' fand '@'. //all_games/game[all_players/player-->@<--name = $name]
Das habe ich so oder so ähnlich selbst getestet.
bydey
Hallo,
Also eher so:
<xsl:for-each select="//all_games/game[all_players/player@name = $name]">(ungetestet)
Die Test-Antwort lautet:
Erwartetes Token ']' fand '@'. //all_games/game[all_players/player-->@<--name = $name]Das habe ich so oder so ähnlich selbst getestet.
Verschachtelungsfehler:
//all_games/game[all_players/player[@name = $name]]
Was genau möchtest du erreichen?
Grüße
Thomas
Hallo Thomas,
Verschachtelungsfehler:
den hat mir Mudguard eingebrockt
//all_games/game[all_players/player[@name = $name]]
Was genau möchtest du erreichen?
Bestimmte Inhalte für alle Spiele ausgeben, die eine bestimmten Spieler enthalten.
bydey
Hallo dey,
- aber ich komme jetzt nicht mehr an die Werte oberhalb der player-Ebene wie gid oder match
Dafür gibt es "ancestor" (Vorfahre).
Gruß Mia
Hallo Mia,
Dafür gibt es "ancestor" (Vorfahre).
Bist du auch noch so gut mir ein kurzes Beispiel zu geben?
bydey
Hallo dey,
<all_games>
<game gid="4" match="Hallenturnier in Floersheim" yy="05" mm="01" dd="15">
<result>7. Platz</result>
<report_h>- 7. Platz -</report_h>
<all_players>
<player name="Spieler1">
<goals>3</goals><goalkee></goalkee>
</player>
<player name="Spieler">
<goals>0</goals><goalkee></goalkee>
</player>
<xsl:for-each select="//all_games/game/all_players/player[@name = $name]">
Wenn du zum Beispiel an result kommen möchtest, müsste
<xsl:value-of select="ancestor::result"/>
zum gewünschten Ergebnis führen.
Für die Attribute aus game so etwas wie
<xsl:value-of select="ancestor::game[@...]"/>
Gruß Mia
Hallo Mia,
<xsl:for-each select="//all_games/game/all_players/player[@name = $name]">
Wenn du zum Beispiel an result kommen möchtest, müsste
<xsl:value-of select="ancestor::result"/>
zum gewünschten Ergebnis führen.
Für die Attribute aus game so etwas wie
<xsl:value-of select="ancestor::game[@...]"/>
<xsl:value-of select="ancestor::game[@match]"/>
Das funktioniert soweit schon gut, ich bekomme allerdings keinen Einzelzugriff auf die Atrribute von game.
Alles wird unkontrolliert ausgegeben!
<xsl:value-of select="ancestor::game/result"/>
funktioniert wie gewünscht.
bydey
Hallo,
<xsl:value-of select="ancestor::game[@match]"/>
Das funktioniert soweit schon gut, ich bekomme allerdings keinen Einzelzugriff auf die Atrribute von game.
Alles wird unkontrolliert ausgegeben!
Habe mir selbst geholfen!
<xsl:for-each select="//all_games/game/all_players/player[@name = $name]">
<xsl:for-each select="ancestor::game">
<br/><xsl:value-of select="@match"/> <xsl:value-of select="result"/><br/>
</xsl:for-each>
</xsl:for-each>
bydey
Hallo,
Habe mir selbst geholfen!
<xsl:for-each select="//all_games/game/all_players/player[@name = $name]">
<xsl:for-each select="ancestor::game">
<br/><xsl:value-of select="@match"/> <xsl:value-of select="result"/><br/>
</xsl:for-each>
</xsl:for-each>
<xsl:for-each select="/all_games/game[all_players/player[@name = $name]]">
<br/><xsl:value-of select="@match"/> <xsl:value-of select="result"/><br/>
</xsl:for-each>
oder
<xsl:key name="spieler" match="game" use="all_players/player/@name" />
<xsl:for-each select="/all_games/game[key('spieler', $name)]">
<br/><xsl:value-of select="@match"/> <xsl:value-of select="result"/><br/>
</xsl:for-each>
Grüße
Thomas
Hallo Thomas,
nochmals danke
<xsl:for-each select="/all_games/game[all_players/player[@name = $name]]">
<br/><xsl:value-of select="@match"/> <xsl:value-of select="result"/><br/>
</xsl:for-each>oder
<xsl:key name="spieler" match="game" use="all_players/player/@name" />
<xsl:for-each select="/all_games/game[key('spieler', $name)]">
<br/><xsl:value-of select="@match"/> <xsl:value-of select="result"/><br/>
</xsl:for-each>
Das ist natürlich viel eleganter.
bydey