Xslt 科学记数法与数列

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="/"&

下面的代码段按给定的顺序输出缺少的数字。它适用于小数,但不适用于科学记数法(即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: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?它到底看起来怎么样?这太棒了:)。谢谢你,马丁!