Форматирование чисел на XSL

#
Форматирование чисел на XSL
Для того, чтобы реализовать разделение разрядов, например в цене товара, таким образом, чтобы вместо 12345.67 отображалось 12,345.67 необходимо задекларировать требуемый десятичный формат (в данном случае приводится пример именнованного десятичного формата):
<xsl: decimal-format name="my" decimal-separator="," grouping-separator="." />


А затем "оформлять" отображение чисел, где это требуется, в соответствии с объявленным форматом, например:

<xsl:variable name="pric" select="price"/>
<xsl:value-of select="format-number($pric, '###.##0,00', 'my')"/>


Следует обратить внимание на то, что
<xsl: decimal-format/>
является элементом верхнего уровня, т.е. не может быть в шаблоне
#
Re: Форматирование чисел на XSL
А где он должен быть?
Дело в том, что я хотела бы тут: http://www.shoker.ru/press/video/tests/tests_aqueous/
вывести как раз размер в удобоваримом виде. Прописала

<xsl:template match="/">
    <xsl:apply-templates select="/document/item"/>
</xsl:template>

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

в шаблоне для вывода элементов инфосистемы, а в шаблоне для вывода элемента поставила:
<xsl:value-of select="format-number('item_propertys/item_property[@xml_name='file']/value/@size div 1048576', '###.##0,00', 'my')"/>
Мб<br/>

СМС ругалась долго нехорошими словами..
#
Re: Форматирование чисел на XSL
HVitaminka, данная запись:
<xsl: decimal-format name="my" decimal-separator="," grouping-separator="." />
</xsl:template>

некорректна.

Кроме того:
natalya писал(а):
Следует обратить внимание на то, что <xsl: decimal-format/> является элементом верхнего уровня, т.е. не может быть в шаблоне

Т.е. правильно использовать так:
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml" />

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

<xsl:template match="/">
    <xsl:apply-templates select="/document/item"/>
</xsl:template>
...
#
Re: Форматирование чисел на XSL
Обратите внимание, что в строке
<xsl: decimal-format name="my" decimal-separator="," grouping-separator="." />
между "<xsl:" и "decimal-format" стоит пробел. Его следует убрать. Это сделано потому, что форум преобразует данную часть фразы без пробела в смайлик
#
Re: Форматирование чисел на XSL
1. в шаблонах (для вывода списка элементов инфосистемы и для вывода элемента инфосистемы) поставила:

<xsl:decimal-format name="my" decimal-separator="," grouping-separator="." />
<xsl:template match="/">
    <xsl:apply-templates select="/document/item"/>
</xsl:template>


2. в шаблоне для вывода элемента инфосистемы ставлю
<xsl:template match="blocks/items/item">

...

<b><a href="/download_file.php?download_propertys_items_id={item_propertys/item_property/property_id}"><xsl:value-of disable-output-escaping="yes" select="item_name"/></a></b>
<br/>
<xsl:value-of select="format-number('item_propertys/item_property[@xml_name='file']/value/@size div 1048576', '###.##0,00', 'my')"/>
Мб<br/>
<xsl:value-of disable-output-escaping="yes" select="item_description"/>

результат:

ПРЕДУПРЕЖЕДЕНИЕ: XSLTProcessor::importStylesheet() [function.XSLTProcessor-importStylesheet]: Invalid expression в файле /home/u9090/shoker.ru/www/modules/Xsl/Xsl.class.php (строка 196)
ПРЕДУПРЕЖЕДЕНИЕ: XSLTProcessor::importStylesheet() [function.XSLTProcessor-importStylesheet]: compilation error: file /home/u9090/shoker.ru/www/ line 88 element value-of в файле /home/u9090/shoker.ru/www/modules/Xsl/Xsl.class.php (строка 196)
ПРЕДУПРЕЖЕДЕНИЕ: XSLTProcessor::importStylesheet() [function.XSLTProcessor-importStylesheet]: xsl:value-of : could not compile select expression 'format-number('item_propertys/item_property[@xml_name='file']/value/@size div 1048576', '###.##0,00', 'my')' в файле /home/u9090/shoker.ru/www/modules/Xsl/Xsl.class.php (строка 196)
ПРЕДУПРЕЖЕДЕНИЕ: XSLTProcessor::transformToDoc() [function.XSLTProcessor-transformToDoc]: No stylesheet associated to this object в файле /home/u9090/shoker.ru/www/modules/Xsl/Xsl.class.php (строка 200)
#
Re: Форматирование чисел на XSL
HVitaminka, думаю, что недопустимо использовать выражение
item_propertys/item_property[@xml_name='file']/value/@size div 1048576
в качестве аргумента функции format-number. Поэтому используйте переменные, как здесь:
<xsl:variable name="pric" select="price"/>
<xsl:value-of select="format-number($pric, '###.##0,00', 'my')"/>
Модератор
#
Re: Форматирование чисел на XSL
Форматируем без копеек:
<xsl:value-of select="format-number($pric, '###.##0', 'my')"/>
#
Re: Форматирование чисел на XSL
Везде в шаблоне установил такой формат, но сотые не отображаются...
format-number($price_tax, '### ###,00000', 'my')
#
Re: Форматирование чисел на XSL
есть

<xsl:variable name="price" select="price_discount"/>
<xsl:value-of select="format-number($price, '### ##0,00', 'my')"/>


1700,00

а как копейки после запятой оформить стилем?
ну грубо говоря до запятой один цвет, после другой

спасибо
ку
Модератор
#
Re: Форматирование чисел на XSL
compaq,
Думаю нужно вначале вывести число с нужным форматом без дробной части, а потом вывести просто число минус полученное число без дробной части.

Либо еще вариант - порезать строковыми функциями.
Авторизация