Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычислить разницу дат, Число дней между полученой датой и текущ 
V
    Опции темы
EgoBrain
Дата 29.6.2017, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



Как в XSLT можно вычислить разницу дат в днях между текущей датой и датой полученной из текста в формате "yyyy-mm-dd"?

Код

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
 <soapenv:Body>
<date>2017-06-29</date>
</soapenv:Body>
</soapenv:Envelope>

PM MAIL ICQ Skype   Вверх
diadiavova
Дата 29.6.2017, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



EgoBrain, вот здесь был подобный вопрос. Что до формата, то распарсить дату несложно, достаточно встроенных строковых функций.
http://forum.vingrad.ru/forum/topic-309563...дата-время.html


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
EgoBrain
Дата 25.7.2017, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



Цитата(diadiavova @ 29.6.2017,  20:19)
EgoBrain, вот здесь был подобный вопрос. Что до формата, то распарсить дату несложно, достаточно встроенных строковых функций.
http://forum.vingrad.ru/forum/topic-309563...дата-время.html

Спасибо, но мой процессор даже в current-date не может (javax.xml.transform 1.7) или может быть я неправильно пишу код  smile 
В теме по ссылке сказано что можно решить javacript-ом, я не гнушаюсь любыми доступными способами, еще когда создавал тему пытался и так и сяк, с javascript тоже не вышло.
Моих наработок уже нет, можете на моём примере выше способ реализации продемонстрировать: вызов функции current-date() и вызов javascript?

Это сообщение отредактировал(а) EgoBrain - 25.7.2017, 06:34
PM MAIL ICQ Skype   Вверх
diadiavova
Дата 25.7.2017, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



EgoBrain,  какой ещё каррентдэйт? Последний пост посмотри, там по параметрам датв вычисляется юлианский день. Вычислишь его для интересующих тебя дат и останется только найти разность результатов.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
EgoBrain
Дата 25.7.2017, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



Цитата

EgoBrain,  какой ещё каррентдэйт?

Цитата(EgoBrain @ 29.6.2017,  18:16)
вычислить разницу дат в днях между текущей датой и датой полученной из текста в формате "yyyy-mm-dd"



Это сообщение отредактировал(а) EgoBrain - 25.7.2017, 09:40
PM MAIL ICQ Skype   Вверх
diadiavova
Дата 25.7.2017, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



EgoBrain, да так-то оно так, только вот когда ты, говоря о несуществующей функции(или что там это было) пишешь ее название, как будто она существует, то выглядит это странно.
Что касается текущей даты, то тут все очень просто (не в смысле решения, а в смысле ответа на вопрос smile ): если стандартами такая функция не предусмотрена и процессор ничего подобного не представляет, то как по мне, так вполне очевидно, что вычислить ее, применяя какую-то магию - вряд ли представляется возможным. Тут уж либо найди способ передать эти данные в преобразование (например через параметры), либо придумай костыль. Если параметры недоступны, то в качестве костыля можно использовать какой-нибудь сервис, содержащий дату. Я не знаю, что именно ты там мутишь, но если все делается на сайте, то просто сделай так, чтобы этот сайт по определенному адресу возвращал XML-документ с датой и подгружай его с помощью фукнции document. Если делается в файловой системе, то перед преобразованием сохраняй файл в определенное место и то же самое. Возможно можно придумать что-то более внятное, но все зависит от того, что именно ты делаешь и в каких условиях.
А что касается JavaScript, то там я имел в виду, что в тех случаях, когда результатом преобразования будет HTML, то скрипт можно включить в него и выполнить вычисления уже после преобразования.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
EgoBrain
Дата 26.7.2017, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



diadiavova, спасибо за развернутый ответ. Насчет JavaScript я натыкался на примеры непосредственного его использования в XSLT (не в итоговом документе).
Насчет моих вопросов и т.д. это всё вытекает из незнания основ и стандартов (XML, XSL и прочие смежные), я понимаю что прежде чем применять технологию её нужно изучить, но требуемые сроки решения задачи меньше чем срок изучения и реализации (для таких случаев в том числе и нужен форум).
В результате я пробовал разные способы записи шаблона: подключение пространтв имен, различные способы вызова функции (с префиксом и без) и получал разные ошибки, что меня весьма запутало. Как результат невнятная постановка впороса здесь и неполное описание ситуации.

О функции current-date() узнал из руководства https://www.w3schools.com/xml/xsl_functions.asp где сказано
Цитата

XSLT 2.0, XPath 2.0, and XQuery 1.0, share the same functions library.

The URI of the function namespace is: http://www.w3.org/2005/xpath-functions

Версия XSLT 2.0 была одобрена в качестве рекомендации 24 января 2007 года а используемый мной процессор входит в состав Java EE 1.7, которая вышла 28 июля 2011 года. По идеи он должен осуществлять поддержку XSLT 2.0, значит я что-то делаю не так, не правильно описываю шаблон, потому и попросил пример.

Цитата

то просто сделай так, чтобы этот сайт по определенному адресу возвращал XML-документ с датой и подгружай его с помощью фукнции document

Отличная идея я попробую. А можно получить из вне не целый документ а например значение?

Это сообщение отредактировал(а) EgoBrain - 26.7.2017, 02:23
PM MAIL ICQ Skype   Вверх
diadiavova
Дата 26.7.2017, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(EgoBrain @  26.7.2017,  02:01 Найти цитируемый пост)
Насчет JavaScript я натыкался на примеры непосредственного его использования в XSLT (не в итоговом документе).

В стандарте ничего такого нет, но разные процессоры могут поддерживать скриптинг на разных языках, если используемый тобой процессор поддерживает скриптинг, то узнать об этом ты можешь в документации именно по этому процессору. Кроме того, если код включен непосредственно в XSLT, это еще не значит, что исполняться он будет в процессе преобразования, он может быть предназначен и для итогового документа.
Цитата(EgoBrain @  26.7.2017,  02:01 Найти цитируемый пост)
Версия XSLT 2.0 была одобрена в качестве рекомендации 24 января 2007 года а используемый мной процессор входит в состав Java EE 1.7, которая вышла 28 июля 2011 года. По идеи он должен осуществлять поддержку XSLT 2.0, значит я что-то делаю не так, не правильно описываю шаблон, потому и попросил пример.

Да стандарт-то, конечно, существует давно, вот только его практически никто не поддержал. Джависты, насколько я знаю, используют saxon, когда нужен XSLT2, или еще там есть вроде xalan называется. Из этого можно сделать вывод, что процессор включенный в стандартную библиотеку классов (насколько я понимаю речь именно о таком процессоре) - не поддерживает XSLT2.
Цитата(EgoBrain @  26.7.2017,  02:01 Найти цитируемый пост)
 А можно получить из вне не целый документ а например значение?

Я полагаю ты понимаешь как работает веб-сервер? Ну тогда как ты себе это представляешь? Просто создай небольшой сервис, который по запросу будет выдавать что тебе надо, например вот такой документ
Код

<?xml version="1.0"?><date>2017-07-26</date>
Но если даже документ будет содержать больше данных, то к нему можно применять выражения XPath типа document($url)//date/text()


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
EgoBrain
Дата 27.7.2017, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



Решение с функцией document подошло, закрываю тему.
Дяде Вове отдельный респект.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.1623 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.