Как считать за 1 день, если даты совпадают в XSLT

#xslt #xslt-2.0 #xslt-3.0

Вопрос:

У меня есть сценарий, который я хотел бы считать одним днем, если даты совпадают.

 lt;wd:Dategt;2021-08-18lt;/wd:Dategt; lt;wd:Dategt;2021-08-18lt;/wd:Dategt;  

Как я могу добиться этого с помощью XSLT. Итак, я хочу считать это одним днем, если дата совпадает.

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

1. Не уверен, о чем ты спрашиваешь. Возьмите разницу и добавьте 1?

Ответ №1:

Ты мог бы:

  • используйте xs:date() для оценки этих значений как xs:date
  • затем вычтите одну дату из другой, чтобы получить разницу в виде xs:dateTimeDuration
  • затем используйте days-from-duration() , чтобы вернуть это количество дней (которое будет равно нулю).
  • применитесь abs() таким образом , чтобы нам не нужно было беспокоиться о том, какая дата была слева или справа, а также о положительных или отрицательных значениях
  • а затем добавьте 1 к этому значение

Эта таблица стилей:

 lt;xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"gt;  lt;xsl:template match="/"gt;  lt;xsl:textgt;Days: lt;/xsl:textgt;  lt;xsl:value-of select="abs(days-from-duration(xs:date(/*/*:Date[1]) - xs:date(/*/*:Date[2])))   1"/gt;  lt;/xsl:templategt; lt;/xsl:stylesheetgt;  

Применяется к этому XML-файлу:

 lt;wd:example xmlns:wd="wd"gt;  lt;wd:Dategt;2021-08-18lt;/wd:Dategt;   lt;wd:Dategt;2021-08-18lt;/wd:Dategt;  lt;/wd:examplegt;  

Производит этот результат:

 Days: 1