2010-06-07 35 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