XSLT - 比较前兄弟的元素与当前的节点元素 [英] XSLT - Comparing preceding-sibling's elements with current's node element

查看:32
本文介绍了XSLT - 比较前兄弟的元素与当前的节点元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个 XML 文件:

<recurso url="http://w3c.com"><descripcion>Consorcio W3C</descripcion><tipo>外部</tipo><idioma>ingles</idioma><contenido>一般</contenido><unidad>Unidad 2</unidad></recurso><recurso url="http://html.com"><descripcion>Especificación HTML</descripcion><tipo>外部</tipo><idioma>castellano</idioma><contenido>HTML</contenido><版本>4.01</版本><unidad>Unidad 3</unidad></recurso></recursos>

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

我正在尝试:

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

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

解决方案

几乎正确.

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

:: 用于轴,而不是用于沿路径移动(进行定位步骤").在 XPath 术语中:

<前>前兄弟::recurso[1]/unidad != unidad''''''''''''''''' ++++++++++++++++###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' = 轴名称(可选,默认为child")+ = 节点测试(必需)# = 谓词(可选,用于过滤)~ = 定位步骤(每个选择表达式至少需要一次)

[1][position()=1] 的简写.

child 轴隐含在一个位置步骤中,所以这个

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

相当于:

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

I have this XML file:

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

I want to compare one "recurso"'s preceding sibling element "unidad" with the "unidad" of the current "recurso" to check if they're different.

I was trying:

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

But I know it's horribly wrong :( I hope you could help me, thank you very much.

解决方案

Almost correct.

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

The :: is for axes, not for moving along a path ("making a location step"). In XPath terminology:

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)

The [1] is a shorthand for [position()=1].

The child axis is implicit in a location step, so this

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

is equivalent to this:

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

这篇关于XSLT - 比较前兄弟的元素与当前的节点元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆