Saya mencoba menemukan elemen terakhir di xml saya, yang terlihat seperti:
<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>
Saya perlu mendapatkan semacam menu terbalik, di mana elemen saat ini dan orang tua disorot sebagai "aktif" dan saudara kandung sebagai "tidak aktif". Sebagai gantinya, saya memiliki pohon yang berantakan hanya ketika saya mengira elemen "D" diklik.
Elemen D ganda adalah masalah saya. Ketika saya menggunakan
select="//element[@name='D'][last()]"
atau select="//element[@name='D' and last()]"
(btw mana yang benar?) Pertama kali kejadian pertama dari elemen D dipilih (debugger menunjukkan itu). Ini 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>