2013-10-01 3 views
1

Я пытаюсь проанализировать строку даты в XSLT2.0/XPath2.0. Проблема в том, что дата не находится в стандартном формате и поэтому потребует вычислений, а не просто манипуляции с строкой. Конкретно, даты приводятся в шаблоне «yyyyDDD» (да, это так, год, за которым следует день года).Разбор строки нестандартной даты в XSLT

Для примера, 2013051 == 20 февраля 2013

Я исследовал этот вопрос на некоторое время теперь, и нашел ответы на многие вопросы, которые не помогают мне, например, как:

  • Синтаксической дату с подстрокой: Мне нужно вычислить месяц & дня от дня года
  • даты: синтаксическая дата размещения: не поддерживается Saxon (я в настоящее время использую оценочную версию SaxonEE, если поддержка этого функция расширения может быть добавлена, я готов слушать!)
  • Использование сценариев: Я пытаюсь отойти от MSXML/Javascript в XSLT, пытаясь упростить код, и хотел бы избежать возврата туда, если я могу избежать
  • Рассчитать дату от руки: вам нужно получить PhD в датах только для того, чтобы получить их правильно ... слишком много случаев для меня, чтобы чувствовать себя в безопасности, изобретая колесо здесь
  • Передайте даты XSLT в стандартном формате: откинуться на классических программистов «Дилемма, я не могу контролировать входные данные для этого XSLT.

Java-метод Date.parse() является точно то, что мне нужно здесь, и я нахожу это трудно поверить, что нет никакого стандартного способа обработки дат в XSLT.

ответ

3

XPath-не имеет специальные разбор функции, но она имеет много функций для указания даты и времени расчетов.

Таким образом, вы можете создать дату для первого дня в году, а затем добавить к ней смещение дня. Если входная строка находится в $input, просто вставить это выражение XPath в вашем XSLT:

xs:date(concat(substring($input, 1, 4), "-01-01")) + xs:dayTimeDuration(concat("P",number(substring($input,5, 3)) - 1, "D")) 
+0

Я люблю все, что об этом решении, особенно тот факт, что он отлично работает! Просто покажу вам, что иногда вам нужно искать проблему под другим углом :) – Klazen108