Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT-删除货币格式并检查是否为数字,否则作为字符串传递_Xml_Xslt - Fatal编程技术网

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

Xml XSLT-删除货币格式并检查是否为数字,否则作为字符串传递,xml,xslt,Xml,Xslt,我需要从字符串中删除货币格式,但我的问题是该字段有时包含货币,有时是文本字符串。因此可能是: 20美元 123000.00 123000.00美元 你好,世界 作为单个XPATH测试,如果字符串可以作为数字计算并返回布尔值: number(translate(.,translate(.,'0123456789.',''),'')) 您可以将其放入如下模板中,以返回已解析的数字或不返回任何内容: <xsl:template name="getNumber"> <xsl:

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

20美元
123000.00
123000.00美元

你好,世界

作为单个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>

作为单个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>

我认为这是一个更清晰的答案:

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

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


我认为这是一个更清晰的答案:

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

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



货币符号始终是“$”还是可以是欧元、日元等?如果您可以在相应字符串前面写入所需输出,则更为详细。货币符号始终是“$”还是可以是欧元、日元等?如果您可以在相应字符串前面写入所需输出,则更为详细。。