Как преобразовать даты и время в XSLT?

#xml #date #xslt-2.0

Вопрос:

Я использую XSLT для анализа ленты WordPress. Но есть проблема с некоторым преобразованием формата даты. Мне нужно проанализировать. <pubDate>Mon, 11 Oct 2021 13:23:10 0000</pubDate> 2021-10-11T13:23:10z Я использовал

                 <xsl:element name="field">
                    <xsl:attribute name="name">ds_date_created</xsl:attribute>
                    <xsl:value-of select="format-date(pubDate,'[Y0001]-[M01]-[D01]')"/>
                </xsl:element>
 

format-date функция xslt, но получает это сообщение:

     Validation error at xsl:value-of on line 61 
      FORG0001: Invalid date "Mon, 01 Nov 2021 13:45:01  000..." (Non-numeric year component)
     at xsl:apply-templates (#23)
     processing /rss/channel[1]/item[1]
 

Может ли эта дата быть преобразована с помощью xslt? Есть ли какой-нибудь способ?

Ответ №1:

Вы могли бы сделать это «вручную», например, так: https://gist.github.com/aendrew/eaa220e619008cbb628c

Если вы скопируете и вставите связанное определение шаблона, вы можете вызвать его с помощью:

 <xsl:call-template name="format-from-rfc-to-iso">
    <xsl:with-param name="rfc-date" select="pubDate" />
</xsl:call-template>
 

вместо вашего <xsl:value-of

Ответ №2:

Я думаю, что в XSLT 3 (например, Saxon 9.8 или более поздней версии, Saxon-JS 2, Altova XML 2017 R3 и более поздних версиях) вы можете использовать parse-ietf-date для анализа этого формата: parse-ietf-date('Mon, 11 Oct 2021 13:23:10 0000') . Это должно дать вам xs:dateTime , поэтому для его форматирования используйте format-dateTime .