Xslt 科学记数法与数列
下面的代码段按给定的顺序输出缺少的数字。它适用于小数,但不适用于科学记数法(即1.6646144E7)。 如何解决这个问题Xslt 科学记数法与数列,xslt,xslt-2.0,Xslt,Xslt 2.0,下面的代码段按给定的顺序输出缺少的数字。它适用于小数,但不适用于科学记数法(即1.6646144E7)。 如何解决这个问题 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"> <xsl:template match="/"&
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
<xsl:template match="/">
<xsl:variable name="OriginalSequence">16646145 1.6646144E7 16646149 1.6646148E7 16646151 1.664615E7 16646163 1.6646162E7</xsl:variable>
<!--<xsl:variable name="OriginalSequence">1 2 8 2 3</xsl:variable>-->
<xsl:variable name="seq1" as="xs:integer*" select="for $s in $OriginalSequence/tokenize(normalize-space(.), '\s+') return xs:integer($s)"/>
<xsl:variable name="seq2" as="xs:integer*" select="min($seq1) to max($seq1)"/>
<xsl:variable name="seq3" as="xs:integer*" select="$seq2[not(. = $seq1)]"/>
<missing><xsl:value-of select="$seq3"/></missing>
</xsl:template>
16646145 1.6646144E7 16646149 1.6646148E7 16646151.664615E7 16646163 1.6646162E7
所需输出:
<missing>16646145 16646146 16646147 16646152 16646153 16646154 16646155 16646156 16646157 16646158 16646159 16646160 16646161</missing>
16646145 16646146 16646147 16646152 16646153 16646154 16646155 16646156 16646157 16646158 16646159 16646160 16646161
变量originalSequence是原始xslt中算术运算的输出,我不确定是否可以告诉xslt2.0没有转换为科学符号?作为示例中的修复,您可以使用
xs:integer(xs:double($s))
而不是直接尝试xs:integer($s)
。但是,如果您的实际代码首先创建xs:double
s而不是xs:integer
s,那么您可能只需要将该代码更改为创建整数。这取决于您拥有和未共享的代码
我不确定是否可以告诉您xslt2.0不能转换为科学
符号
是的,您可以使用format-number()函数精确获取所需的格式。默认的数字到字符串转换对1e-6到1e+6范围之外的数字使用指数表示法。您的算术运算计算的是什么,一个
xs:integer
s序列?还是xs:double
s?它到底看起来怎么样?这太棒了:)。谢谢你,马丁!