XSLT - 删除货币格式并检查是否为数字,否则以字符串形式传递

时间:2010-02-15 22:07:04

标签: xml xslt

我需要从字符串中删除货币格式,但我的问题是该字段有时包含货币,有时它是一串文本。所以它可能是:

20 $
123,000.00
$ 123,000.00
你好,世界!

2 个答案:

答案 0 :(得分:1)

作为单个XPATH测试,如果字符串可以作为数字计算并返回布尔值:

number(translate(.,translate(.,'0123456789.',''),''))

您可以将它放入这样的模板中,以返回已解析的数字或不返回任何内容:

<xsl:template name="getNumber">
    <xsl:param name="stringVal" />
     <!--remove all characters other than number and period, use the result in the outer replace to yield only numbers and period -->
    <xsl:variable name="numVal" select="translate(.,translate(.,'0123456789.',''),'')" />
    <xsl:choose>
        <!--If what is left evaluates as a number, then it's a number! -->
        <xsl:when test="number($numVal)">
            <xsl:value-of select="$numVal"/>
        </xsl:when>
        <xsl:otherwise>
            <!--Do nothing-->
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

像这样调用模板:

    <xsl:call-template name="getNumber">
        <xsl:with-param name="stringVal" select="." />
    </xsl:call-template>

答案 1 :(得分:0)

我认为这是一个更干净的答案:

<xsl:template name="getNumber">
  <xsl:param name="p_stringVal" />
  <xsl:value-of select="translate($p_stringVal,translate($p_stringVal,'0123456789.',''),'')" />
</xsl:template>

像这样调用模板(例如$ input_value ='$ 555,555.55'):

<xsl:call-template name="getNumber">
  <xsl:with-param name="p_stringVal" select="$input_value" />
</xsl:call-template>