Вы можете использовать xsl:perform-sort
для сортировки variant
элементов, а затем вывести или выбрать первый в порядке убывания:
<xsl:template match="variants">
<xsl:variable name="sorted-variants" as="element(variant)*">
<xsl:perform-sort select="variant">
<xsl:sort select="xs:integer(stock)" order="descending"/>
</xsl:perform-sort>
</xsl:variable>
<xsl:copy-of select="$sorted-variants[1]"/>
</xsl:template>
https://xsltfiddle.liberty -development.net / 3NzcBsU
То же самое возможно при использовании apply-templates
, если другие шаблоны (например, преобразование идентичности) копируют обработанные variant
s:
<xsl:template match="variants">
<xsl:variable name="sorted-variants" as="element(variant)*">
<xsl:apply-templates select="variant">
<xsl:sort select="xs:integer(stock)" order="descending"/>
</xsl:apply-templates>
</xsl:variable>
<xsl:copy-of select="$sorted-variants[1]"/>
</xsl:template>
https://xsltfiddle.liberty -development.net / 3NzcBsU / 1
С помощью for-each
вы можете напрямую вкладывать if test="position() = 1"
:
<xsl:template match="variants">
<xsl:for-each select="variant">
<xsl:sort select="xs:integer(stock)" order="descending"/>
<xsl:if test="position() = 1">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:template>
https://xsltfiddle.liberty -development.net / 3NzcBsU / 2