faktotum: XPath-Expression mit Bezug auf aktuelles Element

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

  1. 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

    1. 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

    2. 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

      1. Hallo Christian,

        vielen Dank für die Info :-) Und endlich hört dieses Grummeln in meinem Kopf auf ;-)

        Gruß Uwe

      2. 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