1

を使用して数字を追加している間XSL、 で結果を表示していexponentます。たとえばProductID1111

<xsl:value-of select="@ProductID + 1000000"/>

のようなものが表示さ1.1111E6れていますが、結果を にしたいです1001111

ありがとう。

4

2 に答える 2

1

おそらくスキーマに対応しない変換を使用しているため、@ ProductIDの値は型指定されていません。つまり、算術演算を実行すると、結果はxs:doubleになります。整数演算を行った場合:

xs:integer(@ProductID) + 1000000

結果はxs:integerになり、そのように出力されます。

XPath 1.0では、すべての算術演算はxs:double算術演算ですが、数値から文字列への変換ルールでは、「整数」を整数であるかのように出力する必要があるため、この事実が隠されています。

于 2012-05-30T14:59:38.060 に答える
1

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:integerxs:decimalであるため、このソリューションは任意の整数値に対しても機能します。

于 2012-06-15T16:06:29.730 に答える