XPath-Expression mit Bezug auf aktuelles Element
faktotum
- xsl
0 amolip
Hallo zusammen!
Ich habe ungefähr folgendes Problem in einem XSLT-Stylesheet:
<xsl:template match="article_list">
<xsl:for-each select="document('menu.xml')//group[@name=##name##]/page">
<h3><xsl:value-of select="title[@lang=$language]" /></h3>
<p class="summary"><xsl:value-of select="document(@href)//article[@lang=$language]/summary /></p>
</xsl:for-each>
</xsl:template>
Ich hoffe ihr versteht ungefähr was der Sinn der Sache sein soll:
Das Element article-list taucht in den index-dokumenten für bereiche (groups) in einer Webseite auf. Die for-each anweisung soll sich aus der externen Datei 'menu.xml' alle "pages" der gruppe herauspicken, bei der das attribut "name" gleich dem attribut "name" im übergebenen "article_list" ist.
Mein Problem liegt nun an der Stelle die ich behelfsweise mit ##name## gekennzeichnet habe. Ich will hier eigentlich den Wert des "name"-Attributs der "article_list" stehen haben .. wie mache ich das?? ich dachte an so eine Konstruktion:
<xsl:for-each select="document('menu.xml')//group[@name={@name}]/page">
Das ist aber anscheinend keine gültige XPath-Anweisung!!
Wäre es sinnvoll hier eine "Variable" $group_name einzuführen?? oder lässt sich dieser Rückbezug auf das "article_list"-Element auch anderweitig realisieren?
Vielen Dank für eure Hilfe!
Faktotum
Hallo Faktotum,
Wäre es sinnvoll hier eine "Variable" $group_name einzuführen??
Das ist auf jeden Fall eine Möglichkeit, wenn ich dich richtig verstehe:
<xsl:template match="article_list">
<xsl:variable name="myName" select="@name" />
<xsl:for-each select="document('menu.xml')//group[@name=$myName]/page">
oder lässt sich dieser Rückbezug auf das "article_list"-Element auch anderweitig realisieren?
Also für ##name## direkt einen XPath-Ausdruck. Ich weiß es nicht, ich glaube eher nicht. Der Kontextknoten innerhalb des Prädikats ist »group«. Wie sollte man ausgehend davon auf »article_list« kommen? Ich bin mir aber überhaupt nicht sicher,ich hatte dieses Problem irgendwann, irgendwo und irgendwas in meinem Kopf grummelt nun ständig, das geht ;-)
Gruß Uwe
Hallo Uwe,
vielen Dank für deine Antwort, ich hab' die Sache nun mit einer Variablen gelöst.
Eine entsprechende XPath-Expression wäre mir zwar lieber gewesen, aber so klappts ja auch ;)
Gruß
Faktotum
Hallo Uwe,
Das ist auf jeden Fall eine Möglichkeit, wenn ich dich richtig verstehe:
<xsl:template match="article_list">
<xsl:variable name="myName" select="@name" />
<xsl:for-each select="document('menu.xml')//group[@name=$myName]/page">
Alternativ:
<xsl:template match="article_list">
<xsl:for-each select="document('menu.xml')//group[@name = current()/@name]/page">
...
</xsl:for-each>
</xsl:template>
Siehe: http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#current.
Viele Grüße,
Christian
Hallo Christian,
vielen Dank für die Info :-) Und endlich hört dieses Grummeln in meinem Kopf auf ;-)
Gruß Uwe
Hallo Christian,
vielen Dank! das ist es was ich gesucht habe!!
das sieht auf jeden fall besser aus als der umweg über die variable
Gruß
Kristian alias Faktotum