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">
...