183 votes

XSLT pour obtenir le dernier élément

J'essaie de trouver le dernier élément de mon xml, qui ressemble à ceci :

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

J'ai besoin d'une sorte de menu inversé, où l'élément courant et ses parents sont mis en évidence comme étant "actifs" et les frères et sœurs comme étant "inactifs". Au lieu de cela, j'ai un arbre désordonné uniquement lorsque je suppose que l'élément "D" est cliqué.

Les éléments à double D sont mon problème. Lorsque j'utilise select="//element[@name='D'][last()]" ou select="//element[@name='D' and last()]" (btw quelle est la bonne ?) première fois première occurrence de L'élément D est sélectionné (le débogueur le montre). Voici 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>

386voto

Robert Christie Points 7323

Vous devez mettre le last() l'indexation sur le résultat de la liste de nœuds, plutôt que sur les critères de sélection. Essayez :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X