J'essaie de trouver le dernier élément de mon xml, qui ressemble à:
<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'obtenir une sorte de menu inversé, où l'élément actuel et les parents sont mis en évidence comme "actifs" et les frères comme "inactifs". Au lieu de cela, j'ai un arbre désordonné uniquement lorsque je suppose que l'élément "D" a cliqué.
Les éléments Double D sont mon problème. Quand j'utilise
select="//element[@name='D'][last()]"
ou select="//element[@name='D' and last()]"
(btw lequel est correct?) La première fois que la première occurrence de l' élément D est sélectionnée (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>