XSLT-трансформация за деньги - PullRequest
1 голос
/ 21 ноября 2011

Мне нужно XSLT-преобразование за деньги.

Во входных данных XML указаны цены в виде чисел:

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

Мне нужно иметь выходной XML после XSLT-преобразования следующим образом (чешский формат):

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

Можно ли это сделать с помощью XSLT? Большое спасибо.

Редактировать: Я использую XSLT 2.0.

Ответы [ 3 ]

4 голосов
/ 23 ноября 2011

Это преобразование (в обеих версиях 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>
0 голосов
/ 21 ноября 2011

Используйте 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>

Однако я не уверен, как получить ", -" таким образом.

0 голосов
/ 21 ноября 2011

Вы можете отобразить числа как денежные строки, зависящие от локали, если ваша таблица стилей имеет экземпляр объекта NumberFormat.Вы можете получить один, используя java.text.NumberFormat.getInstance(Locale locale).getCurrencyInstance().Затем добавьте его в свою таблицу стилей и начинайте.

...