gpt4 book ai didi

xslt - 测试 xs :decimal in XSL? 的正确方法是什么

转载 作者:行者123 更新时间:2023-12-02 11:41:48 25 4
gpt4 key购买 nike

我正在尝试根据传入的数据显示不同的信息。如果它是整数,我想只显示数字,如果它是小数,我想使用 0.00# 模式。是的,我知道,有点困惑,但这就是开发规范。 :>

对于该特定部分,我有以下 XSL,但我无法看到

的 xsl:when 错误消息

"Expected end of expression, found 'castable'. number(SAVG) -->castable <-- as xs:decimal"

<xsl:choose>
<xsl:when test="number(SAVG) > 0">
<xsl:choose>
<xsl:when test="number(SAVG) castable as xs:decimal">
<xsl:value-of select="format-number(SAVG, '###,###,##0.00#')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="format-number(SAVG, '###,###,##0.###')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="number(SAVG) = 0">
<xsl:text disable-output-escaping="yes">&amp;lt;</xsl:text>1
</xsl:when>
<xsl:otherwise>N/A</xsl:otherwise>
</xsl:choose>

我尝试寻找/探索答案,我尝试过“实例”,我尝试过使用 xsl:if 等,但我似乎无法让它工作。任何帮助将不胜感激。

谢谢。

来自评论:

Yes, we are using 1.0. I'm sorry I'm new to the XSL processing, how do I glue your XSL and input to generate the html?

最佳答案

我。 XSLT 1.0:

XSLT 1.0 使用的 XPath 1.0 数据模型中没有 xs:integer 和 xs:decimal。

这是您可以使用的代码片段:

    <xsl:choose> 
<xsl:when test="not(floor(SAVG) = SAVG)">
<xsl:value-of select="format-number(SAVG, '###,###,##0.00#')"/>
</xsl:when>
<xsl:otherwise> <!-- Integer value -->
<xsl:value-of select="SAVG"/>
</xsl:otherwise>
</xsl:choose>

请注意:为了测试数值是否为整数,我们使用以下测试:

 floor($someNum) = $someNum
<小时/>

这是执行此操作的一种方法:

<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 $num in (3, 3.14)
return
if($num instance of xs:integer)
then ($num, ' is xs:integer', '&#xA;')
else if($num instance of xs:decimal)
then ($num, ' is xs:decimal', '&#xA;')
else ($num, ' is something else', '&#xA;')
"/>
</xsl:template>
</xsl:stylesheet>

当此转换应用于任何 XML 文档(未使用)时,就会生成所需的正确结果:

3  is xs:integer 
3.14 is xs:decimal

或者,根据您的示例使用 format-number() 函数:

<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 $num in (3, 3.14)
return
if($num instance of xs:integer)
then (format-number($num, '###,###,##0.###'), '&#xA;')
else if($num instance of xs:decimal)
then (format-number($num, '###,###,##0.00#'), '&#xA;')
else ()
"/>
</xsl:template>
</xsl:stylesheet>

产生:

3 
3.14

关于xslt - 测试 xs :decimal in XSL? 的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3824653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com