У меня есть этот 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>
Но я знаю, что это ужасно неправильно :( Я надеюсь, что Вы могли помочь мне, большое спасибо.
Почти правильно.
<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