XSLT数学:列表中的min()在排序时不起作用

时间:2017-01-18 13:19:45

标签: xml xslt xpath xslt-1.0 javax.xml

我想获得索引最低的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);

2 个答案:

答案 0 :(得分:0)

当明确指定名称空间以使用EXSLT扩展时,DF[paste0("X", cutOffYear+1:forecast_years)] math:min都可以完成工作。

math:lowest

答案 1 :(得分:0)

使用

math:min(...),例如在Java中(正是 - math.min(...))。

只写min(...)

我试过这个并得到了正确的结果。