Potřebujete pomoci s XSLT?
Nabízím školení, konzultace, vývoj XSLT kódu na zakázku. Nevájte a kontaktujte mne.

Podpořte provoz stránek
Platba probíhá pomocí služby PayPal a je možné platit kartou nebo převodem z vašeho PayPal účtu.

Kapitola 7. Formátování čísel a automatické číslování

7.1. Formát čísel
7.2. Automatické číslování

V této části se nejprve podíváme na další možnosti formátování a pak na způsoby automatického číslování elementů v dokumentu.

7.1 Formát čísel

Při popisu funkcí jsme nevynechali funkci format-number(), která slouží k formátování čísel. Formát je přitom určen pomocí formátovacího řetězce, který se předává jako parametr. V tomto řetězci lze použít několik speciálních znaků. Pokud tyto znaky nevyhovují našim zvyklostem, můžeme je předefinovat a vytvořit si vlastní formát čísel. Slouží k tomu instrukce <xsl:decimal-format>.

Pokud ve stylu budeme používat pouze jeden formát čísel, nemusíme ho pojmenovat. Pokud však plánujeme více formátů, musíme je pojmenovat pomocí atributu name. Jeho hodnota se předává jako třetí parametr funkci format-number(), která na jejím základě použije zvolený formát.

U každého formátu můžeme změnit následující vlastnosti:

decimal-separator

Znak sloužící k oddělení celé a desetinné části čísla.

grouping-separator

Znak sloužící k oddělení řádů.

minus-sign

Znak použitý jako znak minus.

NaN

Řetězec odpovídající neplatné hodnotě čísla (NaN).

infinity

Řetězec odpovídající hodnotě nekonečno.

percent

Znak odpovídající znaku procent.

per-mille

Znak odpovídající znaku promile.

zero-digit

Znak odpovídající významné nule.

digit

Znak vyhovující libovolné číslici.

pattern-separator

Oddělovač formátovacího řetězce pro kladnou a zápornou část čísla.

Nyní už není problém formátovat čísla podle českých zvyklostí.

Příklad 7.1. Český formát pro desetinná čísla – csnumber.xsl

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

<xsl:output method="text"/>

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

<xsl:template match="/">
  <xsl:value-of select="format-number(123456789.345, '#.###,## Kč', 'cesky')"/>
</xsl:template>

</xsl:stylesheet>

Po spuštění stylu dostaneme:

123.456.789,34 Kč

Výše popsaný přístup ke změně formátu čísel je vhodný, pokud v jednom stylu používá více formátů nebo více jazyků s různými zvyklostmi pro formátování čísel. Chceme-li pouze změnit výchozí formát čísel, stačí použít instrukci <xsl:decimal-format> bez určení názvu (atribut name). Nově definovaný formát se pak používá implicitně, jak ukazuje i příklad 7.2 – „Implicitní český formát pro desetinná čísla – csnumber2.xsl.

Příklad 7.2. Implicitní český formát pro desetinná čísla – csnumber2.xsl

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

<xsl:output method="text"/>

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

<xsl:template match="/">
  <xsl:value-of select="format-number(123456789.345, '#.###,## Kč')"/>
</xsl:template>

</xsl:stylesheet>

© Jiří Kosek 2014

Tento dokument je určen výhradně pro osobní potřebu seznámení s jazykem XSLT. Jakékoliv jiné použití, včetně dalšího šíření, pořizování kopií, použití při školeních a výuce apod. je výslovně zakázáno a bude považováno za porušení autorských práv.


Copyright © 2000-2014 Jiří Kosek