2009-09-22 10 views
95

私は現在の要素と親が「アクティブ」として強調されている逆のメニューのいくつかの種類を取得する必要があります XSLTなって最後の要素

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

のように見える私のxmlの最後の要素を、見つけるためにしようとしています兄弟は「不活動」とみなされます。代わりに結果で私は "D"要素がクリックされたと仮定したときだけ乱雑な木を持っています。

ダブルDの要素は私の問題です。私は select="//element[@name='D'][last()]"又はselect="//element[@name='D' and last()]"を使用する場合(BTW一つが正しいある?) D要素の最初の発生が選択されて初めて(デバッガがことを示しています)。ここでは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> 

答えて

196

最後の()索引付けは、選択基準の一部ではなく、ノードリスト結果に置く必要があります。

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

1を試してみてください。いいです、私はあなたがその方法で()を使うことができたことを忘れていました(そして、インデクサーの使い方が間違っていました)。 – AnthonyWJones

+1

最後のノードの前にどのようにノードを見つけることができますか? – Ege

+6

@Ege '[最後の() - 1]'私 – Jessica

関連する問題