Я хочу получить код для узла medias
с наименьшим индексом. Источник XML выглядит примерно так:XSLT математика: min() в списке не работает во время сортировки
<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
), но это тоже не сработало.
EDIT: Я построение моего XSL трансформатора в Java, используя только этот код и придав ему файл XSLT в качестве источника:
Transformer transformer = TransformerFactory.newInstance().newTransformer(xsltSource);
Как объявляется префикс пространства имен 'math'? Он предполагает, что вы используете функцию расширения. Однако вы отметили этот XSLT 2.0, но 'min' - встроенная функция XPath 2.0, поэтому вы можете просто выполнить' ' –
См. Http://xsltransform.net/ncntCSF, где предложение Тима прекрасно работает. –
Он также отлично работает при использовании расширения Exslt math. См. Http://xsltransform.net/pPJ8LVH. Можете ли вы сказать, какой именно процессор XSLT вы используете? Благодаря! –