Pomocí instrukce <xsl:number>
, můžeme do dokumentu
automaticky vkládat čísla. Instrukce se používá pro takové věci, jako
je automatické číslování kapitol, obrázků apod.
Nejjednodušší způsob použití instrukce je v případech, kdy známe hodnotu, kterou chceme do dokumentu vložit, v tom případě použijeme instrukci následujícím způsobem:
<xsl:number value="výraz
" format="specifikace formátu
"/>
V tomto případě je výraz
vyhodnocován ve stejném kontextu, jako ostatní výrazy v jiných
instrukcích.
Příklad 7.3. Ruční číslování – citaty-podle-abecedy-cislovane.xsl
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes" method="html" encoding="utf-8"/> <xsl:template match="/citaty"> <html> <head> <title>Citáty podle abecedy</title> </head> <body> <xsl:for-each select="citat"> <xsl:sort select="text"/> <p> <xsl:number value="position()" format="I. "/> <xsl:value-of select="text"/> <xsl:text> - </xsl:text> <xsl:value-of select="autor"/> </p> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>
Pokud nepoužijeme atribut value
, je výpočet čísla na první pohled
poměrně komplikovaný, leč o to mocnější.
count
Jako hodnota se udává výraz, který určuje uzly, které se mají započítávat. Pokud atribut nepoužijeme, počítají se jen uzly stejného jména a typu jako aktuální uzel.
from
Určuje, od jakého uzlu se má počítat. Některé způsoby číslování číslují od začátku dokumentu. Pokud použijeme from, čísluje se pouze od nejbližšího předka, který vyhovuje zadanému výrazu.
level="single"
Vrátí počet uzlů, které vyhovují podmínce count
a jsou to předcházející sourozenci,
zvětšený o jedna. Čísluje se na jedné úrovni.
level="any"
Narozdíl od předchozího případu jsou započítávány všechny předchozí uzly a předkové.
level="multiple"
Asi nejsložitější případ. Jsou vybráni všichni předkové, kteří
vyhovují podmínce v count
. Pro
každého z nich se spočítá číslo podobně jako u level="single"
.
Jednotlivé typy číslování ilustrují následující příklady.
Příklad 7.4. Příklad číslování všech úrovní – num1.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="html" encoding="utf-8"/> <xsl:template match="/"> <html> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="*"> <xsl:number count="*" level="any" format="1. "/> <xsl:value-of select="name(.)"/><br/> <xsl:apply-templates/> </xsl:template> <xsl:template match="text()"/> </xsl:stylesheet>
Příklad 7.5. Příklad víceúrovňového číslování – num2.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="html" encoding="utf-8"/> <xsl:template match="/"> <html> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="*"> <xsl:number count="*" level="multiple" format="1. "/> <xsl:value-of select="name(.)"/><br/> <xsl:apply-templates/> </xsl:template> <xsl:template match="text()"/> </xsl:stylesheet>
Příklad 7.6. Příklad nulování čítačů – num3.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="html" encoding="utf-8"/> <xsl:template match="/"> <html> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="*"> <xsl:number count="*" level="multiple" from="polozka" format="1. "/> <xsl:value-of select="name(.)"/><br/> <xsl:apply-templates/> </xsl:template> <xsl:template match="text()"/> </xsl:stylesheet>
Příklad 7.7. Výběr uzlů k započítání – num4.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="html" encoding="utf-8"/> <xsl:template match="/"> <html> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="*"> <xsl:number count="*[name(.)!='br']" level="multiple" from="polozka" format="1. "/> <xsl:value-of select="name(.)"/><br/> <xsl:apply-templates/> </xsl:template> <xsl:template match="text()"/> </xsl:stylesheet>
Příklad 7.8. Formátování čísla – num5.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="html" encoding="utf-8"/> <xsl:template match="/"> <html> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="*"> <xsl:number count="*" level="multiple" format="1-a*A---i.I.) "/> <xsl:value-of select="name(.)"/><br/> <xsl:apply-templates/> </xsl:template> <xsl:template match="text()"/> </xsl:stylesheet>