XSLT - Сравнение элементов предыдущего одноуровневого элемента с элементом узла тока

У меня есть этот 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" с "unidad" текущего "recurso", чтобы проверить, отличаются ли они.

Я пробовал:

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

Но я знаю, что это ужасно неправильно :( Я надеюсь, что Вы могли помочь мне, большое спасибо.

17
задан siondream 7 June 2010 в 14:21
поделиться

1 ответ

Почти правильно.

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

Дочерняя ось неявно указана на этапе определения местоположения, поэтому

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

эквивалентно следующему:

preceding-sibling::recurso[1]/child::unidad != unidad
36
ответ дан 30 November 2019 в 11:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: