You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XSLT中转换WordPress feed的pubDate日期格式?

报错原因

FORG0001报错的核心逻辑是:XSLT内置的format-date()、format-dateTime()函数仅支持传入标准xs:date/xs:dateTime类型的参数,而WordPress RSS输出的<pubDate>是RFC 822格式的普通字符串,无法被自动识别转换为标准日期类型,因此直接传值会触发类型校验失败。

这类日期格式转换完全可以通过原生XSLT实现,无需依赖外部工具,以下是两种主流环境下的实现方案:

XSLT 2.0/3.0 解决方案

XSLT 2.0及以上版本支持tokenize、index-of等字符串处理函数,可以通过月份映射快速完成转换:

<xsl:element name="field">
    <xsl:attribute name="name">ds_date_created</xsl:attribute>
    <!-- 定义月份缩写到两位数字的映射数组 -->
    <xsl:variable name="month-map" select="('Jan','01','Feb','02','Mar','03','Apr','04','May','05','Jun','06','Jul','07','Aug','08','Sep','09','Oct','10','Nov','11','Dec','12')"/>
    <!-- 去除开头的星期前缀和多余空白字符 -->
    <xsl:variable name="pure-date" select="substring-after(normalize-space(pubDate), ', ')"/>
    <!-- 按空格拆分日期各部分 -->
    <xsl:variable name="date-segments" select="tokenize($pure-date, '\s+')"/>
    <!-- 匹配得到月份对应的数字 -->
    <xsl:variable name="month-num" select="$month-map[index-of($month-map, $date-segments[2]) + 1]"/>
    <!-- 直接拼接为目标格式 -->
    <xsl:value-of select="concat($date-segments[3], '-', $month-num, '-', $date-segments[1], 'T', $date-segments[4], 'z')"/>
</xsl:element>

如果需要处理非UTC时区的场景,可以先把拼接后的字符串转换为标准xs:dateTime类型,再通过format-dateTime()函数做更灵活的格式输出。

XSLT 1.0 解决方案

如果运行环境仅支持XSLT 1.0,没有高阶字符串处理函数,可以使用分支判断完成月份转换:

<xsl:element name="field">
    <xsl:attribute name="name">ds_date_created</xsl:attribute>
    <!-- 去除开头的星期前缀和多余空白字符 -->
    <xsl:variable name="pure-date" select="substring-after(normalize-space(pubDate), ', ')"/>
    <!-- 按固定位置截取各日期片段 -->
    <xsl:variable name="day" select="substring($pure-date, 1, 2)"/>
    <xsl:variable name="month-str" select="substring($pure-date, 4, 3)"/>
    <xsl:variable name="year" select="substring($pure-date, 8, 4)"/>
    <xsl:variable name="time" select="substring($pure-date, 13, 8)"/>
    <!-- 匹配月份对应的数字 -->
    <xsl:variable name="month-num">
        <xsl:choose>
            <xsl:when test="$month-str = 'Jan'">01</xsl:when>
            <xsl:when test="$month-str = 'Feb'">02</xsl:when>
            <xsl:when test="$month-str = 'Mar'">03</xsl:when>
            <xsl:when test="$month-str = 'Apr'">04</xsl:when>
            <xsl:when test="$month-str = 'May'">05</xsl:when>
            <xsl:when test="$month-str = 'Jun'">06</xsl:when>
            <xsl:when test="$month-str = 'Jul'">07</xsl:when>
            <xsl:when test="$month-str = 'Aug'">08</xsl:when>
            <xsl:when test="$month-str = 'Sep'">09</xsl:when>
            <xsl:when test="$month-str = 'Oct'">10</xsl:when>
            <xsl:when test="$month-str = 'Nov'">11</xsl:when>
            <xsl:when test="$month-str = 'Dec'">12</xsl:when>
        </xsl:choose>
    </xsl:variable>
    <!-- 拼接为目标格式 -->
    <xsl:value-of select="concat($year, '-', $month-num, '-', $day, 'T', $time, 'z')"/>
</xsl:element>

内容的提问来源于stack exchange,提问作者Asatur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:54:08