Xml 列表上的XSLT math:min()不起作用,而排序起作用
我想获取索引最低的Xml 列表上的XSLT math:min()不起作用,而排序起作用,xml,xslt,xpath,xslt-1.0,javax.xml,Xml,Xslt,Xpath,Xslt 1.0,Javax.xml,我想获取索引最低的媒体节点的代码。源XML与此类似: <item> <medias> <index>999997</index> <code>0001</code> </medias> <medias> <index>1</index> <code>0002</code&g
媒体
节点的代码。源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" />
这将产生:
1,999997,999998,999999
在使用math:min
时,我是否还需要注意其他事项?我还尝试将/text()
编辑:我正在用Java构建XSL转换器,只需使用以下代码,并将XSLT文件作为源代码:
Transformer transformer = TransformerFactory.newInstance().newTransformer(xsltSource);
当显式指定要使用EXSLT扩展的命名空间时,math:min
和math:lower
都会执行此任务
<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:math="http://exslt.org/math">
...
...
math:min(…)
例如在Java中使用(精确地说是-math.min(…)
)
只写min(…)
我试了一下,得到了正确的结果。名称空间前缀math
是如何声明的?它表明您正在使用扩展函数。然而,您已经标记了这个XSLT 2.0,但是min
是一个内置的XPath 2.0函数,因此您只需执行
即可查看Tim的建议在何处运行良好。在使用Exslt数学扩展时,它似乎也运行良好。看见您能确切地说出您使用的是什么XSLT处理器吗?谢谢对不起,问题中缺少信息。math
名称空间似乎是由Java提供的;只需使用不带前缀的min
即可告诉我此函数不存在:(您可以发布一个最小但完整的样式表吗?使用
效果更好吗?只有当XSLT处理器支持这些扩展函数时,它才起作用。而且,由于您显然使用的是XSLT 1.0处理器,因此不应该声明version=“2.0”
math:min()
不在Java中,它是一个EXSLT扩展函数。如果您使用的是XSLT 2.0处理器,则只能使用min()
,而这显然不是。
<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:math="http://exslt.org/math">
...