XSLT अंतिम तत्व हो रही है


138

मैं अपने xml में अंतिम तत्व खोजने की कोशिश कर रहा हूं, जो इस प्रकार है:

    <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()]"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>

जवाबों:


290

आपको last()चयन मानदंड के भाग के बजाय नोडेलिस्ट परिणाम पर अनुक्रमण करने की आवश्यकता है। प्रयत्न:

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

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

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

5
TIL: जाहिर तौर पर कोई [पहला ()] नहीं है लेकिन आप [1]
जेसिका

8
यह मजेदार है कि मुझे इस प्रश्न के लिए 7 साल बाद भी वोट मिले। यह वास्तव में दिखाता है कि XSLT कितना दोषपूर्ण और दोषपूर्ण है। प्लेग के रूप में XSLT से बचें: D
Nik

2
XSLT सुंदर है ... यदि आप एक XML दुनिया में रह रहे हैं
nicojs
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.