相反,我选择了一种方法,我使用 substri-6ren">
gpt4 book ai didi

xml - xslt 条件和十进制值

转载 作者:数据小太阳 更新时间:2023-10-29 02:25:33 26 4
gpt4 key购买 nike

我想比较两个使用 xsl 的软件版本,例如 1.13 和 1.4,我希望 1.13 大于 1.4。

但是,下面的 xslt 条件将失败。

<xsl:if test="1.13 >= 1.4">

相反,我选择了一种方法,我使用 substring-after() 删除整数部分,以便在比较中仅使用余数(假设整数部分目前相同)。

<xsl:if test="substring-after(1.13, ".") >= substring-after(1.4, ".")">

(其实我不得不这样写)

<xsl:if test="substring-after(1.13, &quot;.&quot;) >= substring-after(1.4, &quot;.&quot;)">

这适用于值 1.13 和 1.4。但是,当我比较值 1.10 和 1.4 时,比较失败。

有没有更好的方法来进行这种比较?

最佳答案

这取决于您使用的 XSLT 处理器和版本。有了 Saxon,您可以做到

  <xsl:template match="/" name="main">
<out>
<xsl:value-of select="compare('1.13', '1.4', 'http://saxon.sf.net/collation?alphanumeric=yes')"/>
</out>
</xsl:template>

返回 1 表示第一个参数被认为大于第二个。你也可以这样写

<xsl:if test="'1.13' < '1.4'" 
default-collation="http://saxon.sf.net/collation?alphanumeric=yes"/>

如果您不想依赖于处理器相关的排序规则 URI,那么在 XSLT 3.0 中,您可以使用 fn:sort() 函数,它允许您提供一个函数来计算您自己的排序键,在本文档中大小写可能是 tokenize($x, '\.')!xs:integer(.)

对于较早的 XSLT 版本和不依赖于处理器的特性,使用 xsl:sort 和使用 substring-before 和 substring-after 计算的多个排序键。

关于xml - xslt 条件和十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48823316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com