2010-06-07 55 views
16

Tôi có tập tin XML này:XSLT - So sánh các yếu tố trước-ACE có yếu tố nút hiện tại của

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

tôi muốn so sánh một "recurso" 's trước anh chị em yếu tố 'Unidad' với 'Unidad' của "recurso" hiện tại để kiểm tra xem chúng có khác nhau không.

Tôi đã cố gắng:

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

Nhưng tôi biết đó là sai lầm khủng khiếp :( Tôi hy vọng bạn có thể giúp tôi, cảm ơn bạn rất nhiều

+4

Tốt đầu tiên trả lời chất vấn, BTW. Định dạng tốt, được diễn đạt tốt, với mẫu mã hoàn chỉnh, nhưng ngắn nhất có thể. Tôi muốn nhiều người hơn sẽ làm theo cách đó. :-) – Tomalak

Trả lời

35

Gần đúng

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

.. :: là dành cho trục, không phải để di chuyển dọc theo một con đường ("thực hiện một bước vị trí"). Trong thuật ngữ 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] là viết tắt của [position()=1].

Trục child là tiềm ẩn trong một bước vị trí, vì vậy đây

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

tương đương với điều này:

preceding-sibling::recurso[1]/child::unidad != unidad 
Các vấn đề liên quan