XSLT - 比较previous-sibling的元素和current的node元素

sio*_*eam 17 xml xslt xpath

我有这个XML文件:

<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>
Run Code Online (Sandbox Code Playgroud)

我想将一个"recurso"的前一个兄弟元素"unidad"与当前"recurso"的"unidad"进行比较,以检查它们是否不同.

我在努力:

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

但我知道这是非常错误的:(我希望你能帮助我,非常感谢你.

Tom*_*lak 36

差不多正确.

<xsl:if test="preceding-sibling::recurso[1]/unidad != unidad">
</xsl:if>
Run Code Online (Sandbox Code Playgroud)

::是轴,而不是沿路径移动("制作位置步骤").在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
Run Code Online (Sandbox Code Playgroud)

相当于:

preceding-sibling::recurso[1]/child::unidad != unidad
Run Code Online (Sandbox Code Playgroud)