XSLT 中的十进制格式以及字符

Posted

技术标签:

【中文标题】XSLT 中的十进制格式以及字符【英文标题】:decimal format in XSLT along with characters 【发布时间】:2017-02-24 06:00:18 【问题描述】:

我是 XSL 的新手,当我们在 XML 节点中有文本时,我有一个关于如何将数字转换为十进制格式的问题。

例如:

<Salary> 15000 USD </Salary>

预期结果:

15,000 美元

我使用了以下转换(我找到了here),但是它只在没有文本时转换:

<xsl:choose>
    <xsl:when test="$Salary >= 1000">
        <xsl:value-of select="format-number(floor($Salary div 1000), '#,##')" />
        <xsl:text>,</xsl:text>
        <xsl:value-of select="format-number($Salary mod 1000, '000')" />
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="format-number($Salary, '#,###')" />
    </xsl:otherwise>
</xsl:choose>

任何帮助将不胜感激。

【问题讨论】:

您的示例值不是数字,因此比较可能是比较字符串。您将需要删除字母字符,然后进行比较。或者将您的字段分成数字和货币部分。 【参考方案1】:

首先,您需要通过删除所有非数字字符将输入转换为数字。

假设您使用的是 XSLT 1.0,那将是:

<xsl:variable name="salary" select="translate(Salary, translate(Salary, '0123456789', ''), '')"/>   

这里我们假设输入总是一个正整数 - 因此没有减号或小数点。

一旦你有了它,你可以继续将结果数字格式化为:

<xsl:choose>
    <xsl:when test="$salary  >= 1000">
        <xsl:value-of select="format-number(floor($salary div 1000), '#,##')" />
        <xsl:text>,</xsl:text>
        <xsl:value-of select="format-number($salary mod 1000, '000')" />
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="format-number($salary, '#,###')" />
    </xsl:otherwise>
</xsl:choose>
<xsl:text> USD</xsl:text>

注意:

您似乎想将数字格式化为印度货币 - 这似乎很奇怪,因为金额是美元。

【讨论】:

我需要文本 USD 也出现在结果中,我无法控制 XML(它来自另一个来源,因此无法对其进行更改)。 @Venkat 结果中确实出现了文本“USD”。无需更改 XML - 样式表完成所有工作。在此处查看演示:xsltransform.net/ejivdHZ 感谢您的帮助迈克尔,非常感谢。这确实有助于完成我的任务。我已经在阅读 w3schools 以了解 XSLT 您是否建议任何其他资源?

以上是关于XSLT 中的十进制格式以及字符的主要内容,如果未能解决你的问题,请参考以下文章

关于格式化字符串以及16进制与点分十进制转换的理解

XSLT:显示尾随零

如何将十六进制字符串转换为字节数组,以及十六进制字符串中的字节数组?

C语言中的格式占位符

仅用打印的十六进制格式替换文本文件中的某些字符

python输出格式化及函数format