2010-06-07 4 views
16

나는이 XML 파일이 : 나는의 "unidad"로 형제 요소 "unidad"를 선행 한 "recurso"의 비교하려는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> 

을 현재 "recurso"가 다른지 확인하십시오. 대단히 감사합니다,

<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