XSLT 将输出标记为数字

XSLT Tokenize output as numbers

在下面的代码中:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="input">
    <xsl:variable name="n" select="tokenize(./text(),'[0-9]+([,.][0-9]+)?')"/>
    <xsl:choose>
        <xsl:when test="(($n[0]*$n[0]+$n[1]*$n[1])/(n[3]*($n[0]*$n[0]+$n[1]*$n[1])))>300">
            Retina!
        </xsl:when>
        <xsl:otherwise>
            Trash!
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>
</xsl:stylesheet>

示例输入:

<input>1920 1400 0.425</input>

我使用 tokenize 来匹配两个 input 标签之间的一些数字。唯一的问题是生成的数字列表都被格式化为字符串,因此代码后面的数学运算失败。

那么,有没有办法让分词器输出数字列表,或者 XSLT 2.0 中是否有等同于 map 的方法?

注意:我使用的是 Saxon 处理器

is there a way to get tokenizer to output a list of numbers

是的。例如,您可以这样做:

<xsl:variable name="n" select="for $i in tokenize($input, $pattern) return number($i)"/>

但是请注意:

  1. 您的标记化模式没有return预期值;
  2. 在XPath中,节点从1开始编号; $n[0] 为空且任意 使用它的数值运算将导致 NaN.