【问题标题】:XSLT - Comparing preceding-sibling's elements with current's node elementXSLT - 将先前兄弟的元素与当前的节点元素进行比较
【发布时间】:2010-06-07 14:21:22
【问题描述】:

我有这个 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>

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

我在尝试:

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

但我知道这是大错特错 :( 我希望你能帮助我,非常感谢。

【问题讨论】:

  • 很好的第一次问题,顺便说一句。格式良好,措辞良好,具有完整但最短的代码示例。我希望更多的人会这样做。 :-)

标签: xml xslt xpath


【解决方案1】:

几乎正确。

<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

【讨论】:

    猜你喜欢
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多