decimal-format
El elemento decimal-format permite definir los caracteres y símbolos utilizados para convertir números en cadenas de texto mediante el uso de la función format-number().
Se trata de un elemento de nivel superior. Por lo tanto, tiene que aparecer como hijo directo del elemento stylesheet o del elemento transform.
La estructura de este elemento es la siguiente:
<xsl:decimal-format
name="string"
decimal-separator="char"
grouping-separator="char"
infinity="string"
minus-sign="char"
NaN="string"
percent="char"
per-mille="char"
zero-digit="char"
digit="char"
pattern-separator="char"
/>
Donde:
nameespecifica el nombre del formato.decimal-separatorpermite especificar el caracter con el que se separan los decimales. Por defecto, es el punto (.).grouping-separatorpermite especificar el caracter mediante el cual se separan lo miles. Por defecto, es la coma (,).infinitypermite especificar la cadena utilizada para representar el infinito. Por defecto, su valor esInfinity.minus-signpermite especificar el caracter utilizado para indicar números negativos. Por defecto, es el guión medio (-).NaNindica la cadena utilizada cuando el valor no es un número.percentdefine el caracter utilizado para indicar porcentajes. Por defecto, es%.per-milledefine el caracter utilizado para indicar tanto por miles.zero-digitdefine el caracter cero. Por defecto, es0.digitindica el caracter utilizado cuando se quiere reflejar el lugar en el que falta un dígito. Por defecto, es#.pattern-separatorespecifica el caracter utilizado para separar supatrones positivos y negativos dentro de un formato de patrones. Por defecto, es el punto y coma (;).
Todos los atributos son optativos.
La función format-number() recibe tres parámetros:
format-number(number,format,[decimalformat])
Donde:
numberes el valor a formatear.formates el formato que se debe aplicar al número.decimalformates el nombre del elementodecimal-formatdel cual se debe obtener la configuración. Es un parámetro opcional.
Un ejemplo de su uso se puede ver a continuación:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:decimal-format name="euro" decimal-separator="," grouping-separator="."/>
<xsl:template match="/">
<xsl:value-of select="format-number(26825.8, '#.###,00', 'euro')"/>
</xsl:template>
</xsl:stylesheet>
En el ejemplo anterior, se muestra como formatear la divisa europea.
Un ejemplo completo de su uso sería el siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:decimal-format decimal-separator="," grouping-separator="."/>
<xsl:template match="/">
<html>
<body>
<h2>Colección de música</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Título</th>
<th>Artista</th>
<th>Precio</th>
</tr>
<xsl:for-each select="catalogo/cd">
<tr>
<td><xsl:value-of select="titulo"/></td>
<td><xsl:value-of select="artista"/></td>
<td><xsl:value-of select="format-number(precio, '#.##0,00 EUR')"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Consideremos que tenemos el siguiente documento XML:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="hoja.xsl"?>
<catalogo>
<cd>
<titulo>Thriller</titulo>
<artista>Michael Jackson</artista>
<precio>1300</precio>
</cd>
<cd>
<titulo>The Wall</titulo>
<artista>Pink Floyd</artista>
<precio>109.5</precio>
</cd>
<cd>
<titulo>Abbey Road</titulo>
<artista>The Beatles</artista>
<precio>514.95</precio>
</cd>
</catalogo>
En ese caso, la transformación XSLT daría como resultado un documento HTML:
<!DOCTYPE html>
<html>
<body>
<h2>Colección de música</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Título</th>
<th>Artista</th>
<th>Precio</th>
</tr>
<tr>
<td>Thriller</td>
<td>Michael Jackson</td>
<td>1.300,00 EUR</td>
</tr>
<tr>
<td>The Wall</td>
<td>Pink Floyd</td>
<td>109,50 EUR</td>
</tr>
<tr>
<td>Abbey Road</td>
<td>The Beatles</td>
<td>514,95 EUR</td>
</tr>
</table>
</body>
</html>
El documento HTML se visualizaría de la siguiente manera: