#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
.