我想获取索引最低的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
之后),但这也没有用。
编辑:我正在Java中构造我的XSL转换器,仅使用此代码,并为其提供XSLT文件作为源代码:
Transformer transformer = TransformerFactory.newInstance().newTransformer(xsltSource);
显式指定要使用 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">
...
Java中使用math:min(...)
(确切地说是-math.min(...)
)。
写min(...)
.
我试过这个并得到了正确的结果。