2010-06-07 8 views
16

मैं इस एक्सएमएल फ़ाइल है:XSLT - वर्तमान के नोड तत्व के साथ पूर्ववर्ती-भाई के तत्वों की तुलना

<recursos> 
    <recurso url="http://w3c.com"> 
     <descripcion>Consorcio W3C</descripcion> 
     <tipo>externo</tipo> 
     <idioma>ingles</idioma> 
     <contenido>General</contenido> 
     <unidad>Unidad 2</unidad> 
    </recurso> 
    <recurso url="http://html.com"> 
     <descripcion>Especificación HTML</descripcion> 
     <tipo>externo</tipo> 
     <idioma>castellano</idioma> 
     <contenido>HTML</contenido> 
     <version>4.01</version> 
     <unidad>Unidad 3</unidad> 
    </recurso> 
</recursos> 

मैं की "Unidad" के साथ एक "Recurso" की तुलना करने के लिए पूर्ववर्ती भाई तत्व "Unidad" चाहते हैं यह जांचने के लिए वर्तमान "रिकर्सो" है कि वे अलग हैं या नहीं।

मैं कोशिश कर रहा था:

<xsl:if test="preceding-sibling::recurso[position()=1]::unidad != unidad"> 
</xsl:if> 

लेकिन मैं जानता हूँ कि यह बहुत गलत है :( मुझे आशा है कि आप मेरी मदद कर सकता है, आपको बहुत बहुत धन्यवाद

+4

अच्छा पहली बार सवाल है, Btw। अच्छी तरह से स्वरूपित, अच्छी तरह से शब्द, पूर्ण, लेकिन सबसे कम संभव कोड नमूना के साथ। मेरी इच्छा है कि अधिक लोग इस तरह से ऐसा करेंगे। :-) – Tomalak

उत्तर

35

लगभग सही

<xsl:if test="preceding-sibling::recurso[1]/unidad != unidad"> 
</xsl:if> 

।। :: धुरी के लिए है, पथ के साथ नहीं चलने के लिए ("एक स्थान चरण बनाना")। XPath शब्दावली में:

 
preceding-sibling::recurso[1]/unidad != unidad 
''''''''''''''''' ++++++++++ ++++++ 
          ### 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ 

' = axis name  (optional, defaults to "child") 
+ = node test  (required) 
# = predicate  (optional, for filtering) 
~ = location step (required at least once per select expression) 

[1][position()=1] के लिए एक शॉर्टेंड है।

child अक्ष एक स्थान कदम में निहित है, इसलिए इस

preceding-sibling::recurso[1]/unidad != unidad 

इस के बराबर है:

preceding-sibling::recurso[1]/child::unidad != unidad 
संबंधित मुद्दे