XSLT - 比较前兄弟的元素与当前的节点元素 [英] XSLT - Comparing preceding-sibling's elements with current's node element
问题描述
我有这个 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 术语中:
[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屋!