2009-09-22 12 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> 

मैं रिवर्स मेनू, जहां मौजूदा तत्व और माता-पिता के रूप में "सक्रिय" हाइलाइट किया जाता है किसी तरह का प्राप्त करने की आवश्यकता को खोजने के लिए कोशिश कर रहा हूँ और "निष्क्रिय" के रूप में भाई। इसके परिणामस्वरूप मेरे पास केवल एक गन्दा पेड़ है जब मुझे लगता है कि "डी" तत्व क्लिक किया गया है।

डबल डी तत्व मेरी समस्या है। जब मैं select="//element[@name='D'][last()]" या select="//element[@name='D' and last()]" (बीटीडब्ल्यू कौन सा सही है?) पहली बार डी तत्व का पहला घटना चुना गया है (डीबगर यह दिखाता है)। यहाँ 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

आप बल्कि चयन मानदंड के हिस्से के रूप से, nodelist परिणाम पर अंतिम() अनुक्रमण लगाने की जरूरत है।

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

+1 आज़माएं। अच्छा है, मैं भूल गया था कि आप इस तरह से() का उपयोग कर सकते हैं (और एक सूचकांक के उपयोग पर रास्ता बंद था)। – AnthonyWJones

+1

हम पिछले एक से पहले नोड कैसे पा सकते हैं? – Ege

+6

@Ege '[अंतिम() - 1] 'मेरे लिए काम किया – Jessica

संबंधित मुद्दे