Ich versuche, das letzte Element in meiner XML zu finden, das wie folgt aussieht:
<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 brauche eine Art umgekehrtes Menü, in dem das aktuelle Element und die Eltern als "aktiv" und die Geschwister als "inaktiv" hervorgehoben werden. Stattdessen habe ich im Ergebnis nur dann einen unordentlichen Baum, wenn ich annehme, dass auf das Element "D" geklickt wurde.
Double D-Elemente sind mein Problem. Wenn ich
select="//element[@name='D'][last()]"
oder select="//element[@name='D' and last()]"
(übrigens welches ist richtig?) Zum ersten Mal das erste Auftreten des D-Elements auswähle (Debugger zeigt das). 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>