У меня есть XML-поток событий, с датами, с которыми мне хотелось бы взаимодействовать.Расширение диапазонов дат-времени в XSLT 1.0
Источник XML:
<?xml version="1.0" encoding="UTF-8"?>
<events>
<event>
<!-- various elements -->
<start_datetime value="2012-02-09 10:00:00"/>
<end_datetime value="2012-02-09 11:00:00"/>
<!-- various elements -->
</event>
<event>
<!-- various elements -->
<start_datetime value="2012-02-09 10:00:00"/>
<end_datetime value="2012-02-10 15:00:00"/>
<!-- various elements -->
</event>
<!-- other events -->
</events>
Обратите внимание, что /events/event[1]
это событие, которое начинается и заканчивается в тот же день; /events/event[2]
, с другой стороны, охватывает два дня. Вот что я хотел бы сделать:
- Для событий, которые находятся в один день, оставьте только даты и просто преобразуйте эти атрибуты в дочерние элементы.
- Для событий, которые охватывают несколько дней, я хочу создать несколько элементов
<event>
, которые (а) соответствуют общему периоду времени и (б), когда это необходимо, охватывают весь день.
Итак, мой идеал XSLT будет производить:
Желаемая XML:
<?xml version="1.0" encoding="UTF-8"?>
<events>
<event>
<!-- various elements -->
<start_datetime>2012-02-09 10:00:00</start_datetime>
<end_datetime>2012-02-09 11:00:00</end_datetime>
<!-- various elements -->
</event>
<event>
<!-- various elements -->
<start_datetime>2012-02-09 10:00:00</start_datetime>
<end_datetime>2012-02-09 23:59:59</end_datetime>
<!-- various elements -->
</event>
<event>
<!-- various elements -->
<start_datetime>2012-02-10 00:00:00</start_datetime>
<end_datetime>2012-02-10 15:00:00</end_datetime>
<!-- various elements -->
</event>
<!-- other events -->
</events>
Обратите внимание, как мои правила соблюдены:
- Поскольку
/events/event[1]
происходит за тот же день , мы оставляем его в покое (кроме тривиальной задачи изменения значений атрибутов в дочерние элементы). /events/event[2]
охватывает два дня, что означает, что ему нужны два блока<event>
(один от стартового дня и до 23:59:59 по этой дате и один с 00:00:00 по окончанию до окончания datetime).
Заключительные соображения:
Это должно быть достигнуто в XSLT 1.0.
Я не против использования функций даты EXSLT - однако, если их можно избежать, это было бы предпочтительнее.
Очистить как грязь? Как всегда, спасибо за вашу помощь. :)
Я буду проверить t его выход, когда я возвращаюсь домой. Я согласен - EXSLT будет проще. : - \ Ухаживать за этим? ;) – ABach
К сожалению, у меня нет EXSLT! Возможно, кто-то другой может принять вызов :) –
Понял. Во всяком случае, я ценю ваш ответ.Держать крепко. :) – ABach