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.
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>