Проблемма с функцией sum() в XSL

ZhekaNerush

Новичок
Проблемма с функцией sum() в XSL

Есть XML документ следующей структуры:
<root>
<value>12,5</value>
<value>14,5</value>
<value>15,5</value>
<value>14,5</value>
<value>1,5</value>
</root>

Есть XSL документ, обрабатывающий вышеуказанный XML:

...
<xsl:value-of select = "sum(//value)"/>
...

Парсер выдаёт ошибку, т.к. не может просуммировать значения с разделителем ",", парсит только значения с разделителем "."

Подскажите, как можно обойти эти грабли и просуммировать числа с разделителем ","?

-~{}~ 09.08.06 16:47:

Маленькое уточнение, функция sum(//value) возвращает NaN.
 

lucas

Новичок
Попробуй translate, если дело действительно в точках-запятых.
 

ZhekaNerush

Новичок
<xsl:value-of select = "sum(translate(//total, ',' , '.'))"/>

****************************************************
Ошибки:
1.
XSLTProcessor::transformToXml() [function.XSLTProcessor-transformToXml]: Invalid type

2.
XSLTProcessor::transformToXml() [function.XSLTProcessor-transformToXml]: runtime error: file file:///c%3A/Apache/home/localhost/local/reports/xsl/rep_out_2.xsl line 85 element value-of

3.
XSLTProcessor::transformToXml() [function.XSLTProcessor-transformToXml]: xsltValueOf: text copy failed
****************************************************
как я понимаю функция sum() не может принемать параметр в качестве другой функции

-~{}~ 09.08.06 17:26:

Использую PHP 5.1.4
 

zarus

Хитрожопый макак
Ответ очевиден - заменить все "," на ".".
<xsl:value-of select="number()"/> в помощь.

-~{}~ 09.08.06 17:29:

<xsl:value-of select = "sum(//value)"/>
и
<xsl:value-of select = "sum(translate(//total, ',' , '.'))"/>
совсем не похожи...
 

ZhekaNerush

Новичок
Использую OS Windows, в настройках региональных параметров, разделитель целой и дробной части стоит "," (иногда это может быть причиной). Что не так, не пойму. Где баг может скрываться, ну никак не пойму.
А по поводу "." всё работает, но всё же, это не правильно, а как же те народы у который в качестве разделителя стоит символ ","?
Не входит в возможности XSLT1.0 или же баг кроется в php?

-~{}~ 09.08.06 17:37:

извиняюсь, описка:

<xsl:value-of select = "sum(translate(//value, ',' , '.'))"/>
 

lucas

Новичок
<xsl:value-of select = "sum(translate(//value, ',' , '.'))"/>
Ну и что этот код должен делать, если sum принимает node-set, а отдает число, и translate принимает строки, а отдает строку?

Тут с логикой проблемы.

Сделай так: в исходном XML числа должны быть в общепринятом формате (разделитель -- точка). И суммируй их, сколько угодно.
При выводе преобразуй к нужному виду в зависимости от региональных настроек.
 
Сверху