XSLT转换为钱

时间:2011-11-21 10:54:14

标签: xslt xslt-2.0

我需要XSLT转换才能赚钱。

在输入XML数据中,价格为数字:

<prices>
    <price>1234</price>
    <price>1234.5</price>
</prices>

我需要在XSLT转换后输出XML,如下所示(捷克格式):

<prices>
    <price>1 234,-</price>
    <price>1 234,50</price>
</prices>

可以使用XSLT完成吗?非常感谢你。

编辑:我正在使用XSLT 2.0。

3 个答案:

答案 0 :(得分:4)

此转换(在两个版本的XSLT中):

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

<xsl:decimal-format
    name="Cz1"
    grouping-separator=" "
    decimal-separator="_"/>
<xsl:decimal-format
    name="Cz2"
    grouping-separator=" "
    decimal-separator=","/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="price/text()">
      <xsl:value-of select="format-number(., '# ##0,00', 'Cz2')"/>
  </xsl:template>

 <xsl:template match="price/text()[. = floor(.)]" priority="3">
      <xsl:value-of select="format-number(., '# ##0', 'Cz1')"/>
      <xsl:text>,-</xsl:text>
  </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档

<prices>
    <price>1234</price>
    <price>1234.5</price>
</prices>

生成想要的正确结果

<prices>
   <price>1 234,-</price>
   <price>1 234,50</price>
</prices>

答案 1 :(得分:0)

如果样式表具有NumberFormat对象的实例,则可以将数字呈现为特定于语言环境的货币字符串。您可以使用java.text.NumberFormat.getInstance(Locale locale).getCurrencyInstance()获取一个。然后将其添加到样式表中,然后离开。

答案 2 :(得分:0)

使用http://www.w3.org/TR/xslt20/#format-number,如

  <xsl:decimal-format
    name="f1"
    grouping-separator=" "
    decimal-separator=","/>

  <xsl:template match="price">
    <xsl:copy>
      <xsl:value-of select="format-number(., '# ###0,00', 'f1')"/>
    </xsl:copy>
  </xsl:template>

我不知道如何以这种方式获得“, - ”。