我有一個問題,價值$當前變量的 進來作爲 '6E144270003',它在失敗的 撒克遜2.0處理器,錯誤爲 '投射失敗,無效的詞彙值 - xs:double'。
我不能重現這個問題。
這種轉變:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="current" select="'6E144270003'"/>
<xsl:template match="/">
<xsl:if test="number($current) = number($current)">
<xsl:value-of select="$current"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
當SAXON 9.0.0.4運行,產生:
6E144270003
我不確定爲什麼會這樣,當它 不是號碼以及如何 糾正它。基本上,如果它不是一個 號碼,我不希望它輸出
字符串"6E144270003"
可以被用作了XPath 2.0一些,因爲在XPath 2.0中的所謂*科學notation`是表示數字的有效方法。
這是一個有趣的示例,其中XSLT 1.0和XSLT 2.0的行爲不同。
UPDATE:該任擇議定書已經表示,他希望測試如果字符串包含任何東西,但數字會評估爲false()
。
這可以最好用正則表達式來實現,甚至:
translate($s, '', '') eq ''
UPDATE2:該OP再次改變了他的問題!
對於這裏的最新問題的答案:
使用:
$s castable as 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:template match="/">
<xsl:sequence select=
"for $s in ('1234567890',
'123.45',
'123.5',
'-123.45',
'6E144270003'
)
return
if($s castable as xs:decimal)
then $s
else()
"/>
</xsl:template>
</xsl:stylesheet>
當這種轉變應用於任何XML文檔(未使用),產生正確的結果:
1234567890 123.45 123.5 -123.45
@joncar:請學習提問的道德規範。永遠不要改變你的問題,讓接受和提出的答案看起來不正確!更好,問一個新問題。 – 2010-10-12 16:36:20
@joncar:你的例子是小數,而不是「只包含整數的數據,正如你在問題中所說的」。 – 2010-10-12 16:37:11