przyjąć dokument ten formularz:
<root>
<n1>value1</n1>
<n1>value1</n1>
<n1>value1</n1>
</root>
Poniższy prosty stylów określa, czy każdy n1
element ma taką samą wartość:
<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>
wyjściowy:
All same? true
Kluczem do tego arkusza jest wyrażenie:
count(/*/n1[.=/*/n1[1]])=count(/*/n1))
... który porównuje rachubę n1
elementów, których wartość jest równa wartości pierwszego n1
elementu do liczby wszystkich n1
elementów. Liczby te będą równe tylko wtedy, gdy każdy węzeł n1
ma tę samą wartość.
To może być trochę łatwiej odczytać wybierając najpierw wszystko n1
do zmiennej o nazwie n
:
count($n[.=$n[1]])=count($n)
Warunkowo wykonać pewne działania na podstawie wyniku jak ten:
<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>
Próbowałam z poprzedniego rodzeństwo, ale może go uruchomić – Arun