XSLT自定义日期格式-GSA

XSLT自定义日期格式-GSA,xslt,xslt-2.0,Xslt,Xslt 2.0,我正在尝试在动态导航中格式化XSLT,以便以特定格式呈现日期。我的代码生成以下错误: "An unknown error occurred." XSLT代码是: <xsl:template name="CustomDate-DN"> <xsl:param name="d"/> <xsl:value-of select="format-date($d, '[D01] [MN,*-3] [Y0001]', 'en', (), ())"/> &l

我正在尝试在动态导航中格式化XSLT,以便以特定格式呈现日期。我的代码生成以下错误:

 "An unknown error occurred."
XSLT代码是:

<xsl:template name="CustomDate-DN">
    <xsl:param name="d"/>
    <xsl:value-of select="format-date($d, '[D01] [MN,*-3] [Y0001]', 'en', (), ())"/>
</xsl:template>

<xsl:template match="PV" mode="display_value">
    <xsl:param name="js_escape"/>
    <xsl:choose>
        <!-- Customizations - Fancy Date -->
        <xsl:when test="../@T = 4">
            <xsl:call-template name="CustomDate-DN">
                <xsl:with-param name="d" select="@V"/>
            </xsl:call-template>
        </xsl:when>
        <!-- End of Customization -->
    ...

...
如果我替换

 <xsl:value-of select="format-date($d, '[D01] [MN,*-3] [Y0001]', 'en', (), ())"/>


这似乎有效,但日期格式错误

我希望能得到一些帮助。谢谢


更新:我的日期当前看起来像
dd/mm/yyyy
。我正在使用XSLT2.0。我认为问题在于我向format date函数传递了一个字符串。该函数需要一个日期。我不知道如何将
dd/mm/yyyy
字符串转换为日期。

dd/mm/yyyy
格式表示日期的字符串不是有效的
xs:date
,不能在
格式-date()
中使用

但是您可以解析字符串并将其转换为日期,这是一个有效的xs:date类型。在XSLT2.0中实现这一点的一种方法是使用
使用正则表达式提取年、月和日部分。然后,您可以以ISO 8601格式重新生成日期,并将结果存储在一个新变量中,您可以将该变量传递到
format-date()


-
-

您确定使用的是XSLT 2.0处理器吗?日期格式在XSLT/XPath 2.0中是新的。如果您使用XSLT 2.0处理器,那么在出现错误时,
$d
@V
分别是什么样子的?目前看起来像dd/mm/yyyy。我正在使用XSLT2.0。我认为问题在于我向format date函数传递了一个字符串。函数需要一个日期。我不知道如何将dd/mm/yyyy字符串转换为日期?
<xsl:value-of select="$d"></xsl:value-of>
<xsl:template name="CustomDate-DN">
    <xsl:param name="d"/>

    <xsl:variable name="iso-date">
        <xsl:analyze-string select="$d" regex="(\d{{1,2}})/(\d{{1,2}})/(\d{{4}})">
            <xsl:matching-substring>
                <xsl:value-of select="regex-group(3)"/>
                <xsl:text>-</xsl:text>
                <xsl:value-of select="regex-group(2)"/>
                <xsl:text>-</xsl:text>
                <xsl:value-of select="regex-group(1)"/>
            </xsl:matching-substring>
        </xsl:analyze-string>
    </xsl:variable>

    <xsl:value-of select="format-date($iso-date, '[D01] [MN,*-3] [Y0001]', 'en', (), ())"/>
</xsl:template>