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)"/>
但是请注意:
- 您的标记化模式没有return预期值;
- 在XPath中,节点从1开始编号;
$n[0]
为空且任意
使用它的数值运算将导致 NaN
.
在下面的代码中:
<?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)"/>
但是请注意:
- 您的标记化模式没有return预期值;
- 在XPath中,节点从1开始编号;
$n[0]
为空且任意 使用它的数值运算将导致NaN
.