В XSLT 1.0 нет функции max
. Вы можете обойти это, отсортировав элементы по убыванию, а затем приняв значение первого.
Вот еще один (более медленный) способ сделать это:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="PocetDluznychSplatekSplatky"
select="/test/PocetDluznychSplatekSplatky/val[not(../val > .)][1]" />
<xsl:variable name="PocetDluznychSplatekKarty"
select="/test/PocetDluznychSplatekKarty/val[not(../val > .)][1]" />
<xsl:template match="/">
<xsl:choose>
<xsl:when
test="$PocetDluznychSplatekSplatky >=
$PocetDluznychSplatekKarty">
<xsl:value-of select="$PocetDluznychSplatekSplatky" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$PocetDluznychSplatekKarty" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Пример исходного документа:
<test>
<PocetDluznychSplatekSplatky>
<val>22</val>
<val>3241</val>
<val>13</val>
</PocetDluznychSplatekSplatky>
<PocetDluznychSplatekKarty>
<val>1</val>
<val>3234341</val>
<val>13</val>
</PocetDluznychSplatekKarty>
</test>
Выход:
3234341
XPath в каждой переменной select
выглядит следующим образом:
/test/PocetDluznychSplatekSplatky/val[not(../val > .)][1]
Или выберите элемент val
, не имеющий братьев или сестер val
, с большим значением (т. Е. Максимальным).
(Очевидно, вам нужно настроить XPath в соответствии с вашим исходным документом.)
Примечание: Решение sort
работает намного лучше (при условии реализации сортировки n*log(n)
). Второй подход должен сравнивать каждый val
с каждым из его братьев и сестер и поэтому является квадратичным.