XSLT math:min() в списке не работает, а сортировка -

Я хочу получить код для medias узел с самым низким индексом. Исходный XML выглядит примерно так:

<item>
    <medias>
        <index>999997</index>
        <code>0001</code>
    </medias>
    <medias>
        <index>1</index>
        <code>0002</code>
    </medias>
    <medias>
        <index>999998</index>
        <code>0003</code>
    </medias>
    <medias>
        <index>999999</index>
        <code>0004</code>
    </medias>
</item>

В моем XSLT я попробовал это:

<xsl:variable name="minIndex" select="math:min(item/medias/index)" />
<xsl:value-of select="item/medias[index=$minIndex]/code" />

Но по какой-то причине minIndex переменная не получает наименьшее значение из всех значений, а просто значение первого узла, в данном случае 999997,

Однако при сортировке узлов значения располагаются правильно:

<xsl:for-each select="item/medias">
    <xsl:sort select="index" />
    <xsl:value-of select="." /><xsl:text>,</xsl:text>
</xsl:for-each>

Это выводит:

1,999997,999998,999999

Есть ли что-то еще, что я должен заботиться при использовании math:min? Я также попытался добавить /text() до конца моего выбора (после index), но это тоже не сработало.

РЕДАКТИРОВАТЬ: я создаю свой XSL-преобразователь в Java, используя просто этот код и предоставив ему XSLT-файл в качестве источника:

Transformer transformer = TransformerFactory.newInstance().newTransformer(xsltSource);

2 ответа

math:min(...) используется, например, в Java (точно - math.min(...)).

Просто пиши min(...),

Я попробовал это и получил правильный результат.

При явном указании пространства имен для использования расширений EXSLT оба math:min а также math:lowest сделать работу.

<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:math="http://exslt.org/math">
                                       ...
Другие вопросы по тегам