我需要从字符串中删除货币格式,但我的问题是该字段有时包含货币,有时它是一串文本。所以它可能是:
20 $
123,000.00
$ 123,000.00
你好,世界!
答案 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>