Предположим, документ этой формы:
<root>
<n1>value1</n1>
<n1>value1</n1>
<n1>value1</n1>
</root>
Следующая простая таблица стилей определяет, имеет ли каждый элемент n1
одинаковое значение:
<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>
Вывод:
All same? true
Ключом к этой таблице стилей является выражение:
count(/*/n1[.=/*/n1[1]])=count(/*/n1))
..., которое сравнивает количество элементов n1
, значение которых равно значению первого элемента n1
, сколичество всех n1
элементов.Эти значения будут равны только тогда, когда каждый узел n1
имеет одинаковое значение.
Это можно сделать немного проще для чтения, сначала выделив все n1
в переменную с именем n
:
count($n[.=$n[1]])=count($n)
Условно выполните некоторые действия, основанные на результате, подобном следующему:
<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>