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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With