2017-12-19 25 views
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: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> 

理想の出力リレー:

<missing>16646145 16646146 16646147 16646152 16646153 16646154 16646155 16646156 16646157 16646158 16646159 16646160 16646161</missing> 

変数originalSequenceは私のオリジナルXSLTで演算の出力は、私はに変換しないxslt2.0を伝えることができるかどうかわからないです科学的表記法?

+0

算術演算は何を計算しますか? 'xs:integer'sのシーケンスですか?あるいは 'xs:double's?どのように正確に見えるのですか? –

答えて

1

サンプルの修正として、xs:integer($s)の代わりにxs:integer(xs:double($s))を使用できます。しかし、実際のコードがxs:integerの代わりにxs:doubleを最初に作成した場合、単純にそのコードを変更して整数を作成することができます。共有していないコードに依存します。

+0

これは素晴らしいです:)。ありがとう、マーティン! –

0

私はxslt2.0にscience の表記法に変換しないと伝えることはできませんか?

はい、format-number()関数を使用して、必要な形式を正確に取得できます。デフォルトの数値から文字列への変換では、1e-6から1e + 6の範囲外の数値に対して指数表記を使用します。

関連する問題