XSLT: Найдите максимальное значение Effdt, но исключите любую дату, которая больше сегодняшнего дня

#xslt #xslt-2.0

#xslt #xslt-2.0

Вопрос:

Ищу некоторую помощь / руководство по синтаксису и наилучший способ сделать это.

Этот код находит максимальное значение Effdt из трех дат — я готов продолжить с этой частью. Проблема: Некоторые значения Effdt могут быть датированы будущим, что я не хочу учитывать при поиске и возврате максимального значения Effdt. Как я могу сказать: найдите максимальное значение Effdt из трех дат, но исключите любую дату, которая больше сегодняшнего дня.

 <xsl:value-of select="format-date(max((xs:date(ws:Info/ws:Effdt1), xs:date(ws:Info/ws:Effdt2), xs:date(ws:Info/ws:Effdt3) )), '[Y0001][M01][D01]') "/>
  

Например, предположим, что xslt возвращает эти три даты:
20190401
20190424
20190430

Я хочу найти максимальное значение Effdt, которое не истекло сегодня, поэтому ожидал бы результатов: 20190424

Спасибо!

Ответ №1:

Используйте current-date функцию и предикат: max((ws:Info/ws:Effdt1, ws:Info/ws:Effdt2, ws:Info/ws:Effdt3)/xs:date(.)[. lt current-date()]) . Или, возможно, больше, чем было бы сегодня . le current-date() .

Комментарии:

1. Отлично, это работает! Но как мне теперь снова добавить дату в формате? Оно должно быть в формате ггггммдд. Спасибо!

2. Перенесите то, что я опубликовал, в ваш format-date вызов.

3. А, понял! Мне не хватало конечной круглой скобки. Я знал, что это было что-то вроде этого простого, но я настолько не уверен в синтаксисе и в том, как собрать все воедино, что всегда беспокоюсь, что я не на правильном пути. Большое вам спасибо за вашу помощь и терпение 🙂