Ich versuche, das letzte Element in meinem xml zu finden, die wieXSLT immer letztes Element
<list>
<element name="A" />
<element name="B" >
<element name="C" />
<element name="D" >
<element name="D" />
<element name="E" />
<element name="F" />
<element name="G" />
</element>
<element name="H" />
<element name="I" />
</list>
ich eine Art von Reverse-Menü sieht bekommen müssen, wo aktuelles Element und Eltern werden als „aktiv“ markiert und Geschwister als "inaktiv". Stattdessen habe ich einen unordentlichen Baum, nur wenn ich an "D" geklickt habe.
Double D Elemente sind mein Problem. Wenn ich select="//element[@name='D'][last()]"
oder select="//element[@name='D' and last()]"
(von welcher Seite ist richtig?) Erste Mal ersten Auftreten von D-Element ausgewählt ist (Debugger zeigt, dass). Hier ist xsl
<xsl:template match="list">
<xsl:apply-templates select="//navelement[@name = 'D'][last()]" mode="active"/>
</xsl:template>
<xsl:template match="element">
<ul class="menu">
<xsl:apply-templates select="preceding-sibling::node()" mode="inactive"/>
<li><a>....</a></li>
<xsl:apply-templates select="following-sibling::node()" mode="inactive"/>
</ul>
<xsl:apply-templates select="parent::element" mode="active"/>
</xsl:template>
<xsl:template match="element" mode="inactive">
<li><a>....</a></li>
</xsl:template>
+1. Nice one, ich hatte vergessen, dass du() auf diese Weise benutzen könntest (und war weit weg von der Verwendung eines Indexers). – AnthonyWJones
Wie können wir den Knoten vor dem letzten finden? – Ege
@Ege '[last() - 1]' arbeitete für mich – Jessica