2010-06-07 43 views
16

我有這個XML文件: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」的兄弟元素‘團結報’之前用的‘團結報’目前的「recurso」來檢查它們是否不同。

我嘗試:

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

但我知道這是可怕的錯誤:( 我希望你能幫助我,我非常感謝你

+4

了良好的首次問題,順便說一句。格式良好,措辭良好,具有完整但最短的代碼示例。我希望更多的人能這樣做。 :-) – Tomalak 2010-06-07 14:40:57

回答

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