В жизни так случается, что не смотря на всю любовь к дифференциации данных и представления наступает день, когда возникает необходимость перенести часть логики в XSLT шаблон.
В моем случае ничего криминального на горизонте не предвиделось: требовалось провести расчет времени между двумя событиями в иерархическом XML логе. Дата и время хранились в формате частично совместимом с RFC 3339.
Эта совместимость обеспечивалась корректной нотацией даты
В моем случае ничего криминального на горизонте не предвиделось: требовалось провести расчет времени между двумя событиями в иерархическом XML логе. Дата и время хранились в формате частично совместимом с RFC 3339.
Эта совместимость обеспечивалась корректной нотацией даты
yyyy-MM-dd
и времени hh:mm:ss.SS
, но имели место следующие отступления от стандарта:- Дата и время разделялись пробелом, а не буквой
T
; - Число цифр, обозначающих миллисекунды могло варьироваться от «ниодной» до «много-много»;
- Часовой пояс не указывался вообще.
date:difference
, но от него пришлось отказаться. Дело в том, что разницу требовалось получать с точностью до миллисекунд, а этот алгоритм возвращал валидный xsd:duration
(ISO 8601), который миллисекунд не содержит. К тому же парсить чужой output, хоть и формализованный – дело не очень благодарное. Таким образом, покопавшись немного в exslt, я решил написать парсер сам, в надежде, что смогу сделать это быстро…