asumir un documento de esta forma:
<root>
<n1>value1</n1>
<n1>value1</n1>
<n1>value1</n1>
</root>
La siguiente hoja de estilo sencillo determina si cada elemento n1
tiene el mismo valor:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:value-of select="
concat('All same? ', count(/*/n1[.=/*/n1[1]])=count(/*/n1))"/>
</xsl:template>
</xsl:stylesheet>
de salida:
All same? true
La clave de esta hoja de estilo es la expresión:
count(/*/n1[.=/*/n1[1]])=count(/*/n1))
... que compara el recuento de los n1
elementos cuyo valor es igual al valor del primer elemento n1
a la cuenta de todos los elementos n1
. Estos recuentos serán iguales solo cuando cada nodo n1
tenga el mismo valor.
Esto se puede hacer un poco más fácil de leer, seleccionando el primer n1
en una variable llamada n
:
count($n[.=$n[1]])=count($n)
realizar condicionalmente algún tipo de acción basado en el resultado como este:
<xsl:template match="/">
<xsl:variable name="all" select="count(/*/n1[.=/*/n1[1]])=count(/*/n1)"/>
<xsl:if test="$all">All same</xsl:if>
<xsl:if test="not($all)">Not all same</xsl:if>
</xsl:template>
yo estaba tratando con-hermano precedente, pero podría hacerlo funcionar – Arun