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-separatorZnak sloužící k oddělení celé a desetinné části čísla.
grouping-separatorZnak sloužící k oddělení řádů.
minus-signZnak použitý jako znak minus.
NaNŘetězec odpovídající neplatné hodnotě čísla (NaN).
infinityŘetězec odpovídající hodnotě nekonečno.
percentZnak odpovídající znaku procent.
per-milleZnak odpovídající znaku promile.
zero-digitZnak odpovídající významné nule.
digitZnak vyhovující libovolné číslici.
pattern-separatorOddě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>