2009-09-22 38 views
95

Tôi cố gắng để tìm ra yếu tố cuối cùng trong xml của tôi, trông giống nhưXSLT nhận được yếu tố cuối cùng

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

tôi cần để có được một số loại đơn ngược lại, nơi yếu tố hiện tại và cha mẹ được đánh dấu là "tích cực" và anh chị em là "không hoạt động". Thay vào đó, tôi chỉ có một cây lộn xộn khi tôi giả sử phần tử "D" được nhấp vào.

Các yếu tố Double D là vấn đề của tôi. Khi tôi sử dụng select="//element[@name='D'][last()]" hoặc select="//element[@name='D' and last()]" (btw cái nào là chính xác?) Lần đầu tiên lần xuất hiện đầu tiên của phần tử D được chọn (trình gỡ lỗi hiển thị điều đó). Đây là 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> 

Trả lời

196

Bạn cần phải đặt() lập chỉ mục cuối cùng trên kết quả nút, thay vì là một phần của tiêu chí lựa chọn. Hãy thử

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

+1. Một trong những tốt đẹp, tôi đã quên bạn có thể sử dụng() theo cách đó (và là cách tắt về việc sử dụng một chỉ mục). – AnthonyWJones

+1

Làm thế nào chúng ta có thể tìm thấy nút này trước nút cuối cùng? – Ege

+6

@Ege '[last() - 1]' làm việc cho tôi – Jessica

Các vấn đề liên quan