![]() |
|
Модераторы: diadiavova |
![]()
|
|
| evilice |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 27.11.2008 Репутация: нет Всего: нет |
Проблема заключается в следующем:
В xml лежит число вида х.хххххE8 (пример: 1.33946E8) на выходе я должен получить нормальное число вида ххх... (т.е., если исходить из выше упомянутого примера, я должен получить число: 133946000) как средствами xsl это можно сделать? |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 5 Всего: 31 |
||||
|
||||
| evilice |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 27.11.2008 Репутация: нет Всего: нет |
в том-то и дело, что
format-number(number, string, string?) а число 1.234678E7 представляется, как string! и попытка его привести к number, оканчивается еррором! т.е. format-number(1.23442E6, '#.0') на выходе имеет NaN...
или
что однофигственно! ну раз силами стандартных методов это сделать нельзя... придётся извращаться и парсить... |
||||
|
|||||
| sir_nuf_nuf |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 5 Всего: 31 |
да ладно. все работает нормально.
проверьте сами на http://xslt.sitesfree.com/.
как число оно представляется. проблема в следующем xpath:
Добейтесь что бы: <xsl:value-of select="number($yzel/*[local-name()='CostContract'])" /> выводило нормальное число. |
||||||
|
|||||||
| evilice |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 27.11.2008 Репутация: нет Всего: нет |
именно этого мне и нужно добиться... вот часть кода xml файла:
т.е. xsl, в любом случае получает на входе "1.20146E8"... и вот как раз xsl мне и должен помочь с выводом числа в нормальном виде... а из-за того что в числе присутствует "Е", xsl воспринимает его как string -> format-number не отрабатывает должным образом... в общем пока я тщетно искал стандартное решение, мне пришло в голову сделать все через, всем извесное, место... главное чтобы работало, пока не будет найдено, в полне адекватное и быстрое решение... принцип решения проблемы заключается в следующим: т.к. "1.20146E8" воспринимается как string, значит будем парсить! 1) бьём строку на две части "до Е" и "после Е", назовём их "а" и "b" 2) приводим обе части к number 3) с помощью рекурсии умножаем "а" на 10 "b" раз 4) округляем полученное число до целого, но это конкретно для моей задачи(у меня не может быть дробных). можно и под себя настроить округление(по желанию) |
||||
|
|||||
| sir_nuf_nuf |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 5 Всего: 31 |
evilice, да не воспринимается он как string! точно!
вы просто xpath не правильно написали. сделайте простой пример и посмотрите: <xsl:value-of select="format-number('1.20146E8', '#')"/> все работает. ваша проблема в том, что <xsl:value-of select="number($yzel/*[local-name()='CostContract'])" /> у вас ваще ничего не выводит, никаких данных! либо не те. format-number не при чем. Вот пример где все работает.
Учите XPath! |
||||
|
|||||
![]()
|
| Правила форума "XML/XSLT" | |
|
|
Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась. Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение. Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел Желаем удачи в Вашем деле! Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | XML, XSL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |