0

我想获取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);
4

2 回答 2

0

当显式指定命名空间以使用 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">
                                       ...
于 2017-01-18T14:25:33.893 回答
0

math:min(...)例如在 Java 中使用(准确地说是 - math.min(...))。

只写min(...)

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

于 2017-01-18T16:29:06.540 回答