it-swarm.com.de

XSLT bekommt das letzte Element

Ich versuche das letzte Element in meiner XML zu finden, das so 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" markiert sind. Stattdessen habe ich im Ergebnis nur dann einen chaotischen Baum, wenn ich das "D" -Element angeklickt habe.

Doppel-D-Elemente sind mein Problem. Wenn ich select="//element[@name='D'][last()]" oder select="//element[@name='D' and last()]" verwende (übrigens, welches ist das Richtige?), Wird das erste Mal erstes Auftreten von D-Element ausgewählt (der 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>
123
Nik

Sie müssen die Indexierung last() nicht als Teil der Auswahlkriterien, sondern auf das Ergebnis der Knotenliste setzen. Versuchen

(//element[@name='D'])[last()]
263
Robert Christie