を使用して数字を追加している間XSL
、 で結果を表示していexponent
ます。たとえばProductID
、1111
<xsl:value-of select="@ProductID + 1000000"/>
のようなものが表示さ1.1111E6
れていますが、結果を にしたいです1001111
。
ありがとう。
を使用して数字を追加している間XSL
、 で結果を表示していexponent
ます。たとえばProductID
、1111
<xsl:value-of select="@ProductID + 1000000"/>
のようなものが表示さ1.1111E6
れていますが、結果を にしたいです1001111
。
ありがとう。
おそらくスキーマに対応しない変換を使用しているため、@ ProductIDの値は型指定されていません。つまり、算術演算を実行すると、結果はxs:doubleになります。整数演算を行った場合:
xs:integer(@ProductID) + 1000000
結果はxs:integerになり、そのように出力されます。
XPath 1.0では、すべての算術演算はxs:double算術演算ですが、数値から文字列への変換ルールでは、「整数」を整数であるかのように出力する必要があるため、この事実が隠されています。
XSLT 2.0 プロセッサを使用しているようです (私が使用している 5 ~ 6 個の異なる XSLT 1.0 プロセッサはすべて、必要な答えを生成します -- 1001111
.
XSLT 2.0 プロセッサでは、次のように変換@ProductID
するだけxs:decimal
です。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:value-of select="xs:decimal(@ProductID) + 1000000"/>
</xsl:template>
</xsl:stylesheet>
この変換が次の XML ドキュメントに適用される場合:
<t ProductID="1111"/>
必要な正しい結果が生成されます。
1001111
注意してください:
xs:decimal(someNumber)
コンストラクターと 10 進数演算を使用すると、結果の最大精度が保証されsomeNumber
ます。
型xs:decimal
は の基本型ですxs:integer
。つまり、 anyxs:integer
もxs:decimal
であるため、このソリューションは任意の整数値に対しても機能します。