xsl for-each循环中XPath变量的格式化日期

时间:2015-11-27 09:40:22

标签: xml date xslt xpath substring

我正在处理一个简单的导出文件,并陷入了一个简单的问题。我遇到的问题是,当我尝试在for-each循环中的日期上使用substring()时,它会切断路径本身而不是其值。如果我将路径的值保存为变量并尝试使用format-date()格式化它,则导出失败。

我得到的日期的纯值看起来像这样:2015-11-27 00:00,我需要它看起来像这样:2015-11-27(YYYY-MM-DD)。

现在我知道我对xsl很新,所以我的语法可能完全关闭。

这是我的代码:

<xsl:template match="/">
    <xsl:for-each select="Person/account/transactions"><xsl:text>&#xa;</xsl:text>
        <xsl:value-of select="./workplace/NUMBER"/><xsl:text>&#x9;</xsl:text>
        <xsl:text>null&#x9;</xsl:text>
        <xsl:variable name="purchaseDate"><xsl:value-of select="./PURCHASE_DATE"/></xsl:variable><xsl:value-of select="format-date($purchaseDate,'[Y0001]-[M01]-[D01]')"/><xsl:text>&#x9;</xsl:text>
    </xsl:for-each>
    <xsl:for-each select="Person"><xsl:value-of select="./EMAIL"/><xsl:text>&#x9;</xsl:text>
    <xsl:text>982</xsl:text>
    </xsl:for-each>

    <xsl:for-each select="start">
        <xsl:text>"SYNCID"&#x9;"USEREMAIL"&#x9;"DATE"&#x9;"CUSTOMEREMAIL"&#x9;"SURVEYID"</xsl:text>
    </xsl:for-each>
</xsl:template>

我所指的部分是这一部分,这部分格式为date():
<xsl:variable name="purchaseDate"><xsl:value-of select="./PURCHASE_DATE"/></xsl:variable><xsl:value-of select="format-date($purchaseDate,'[Y0001]-[M01]-[D01]')"/>

我也尝试过这种方式用substring()编码:
<xsl:value-of select=substring("./PURCHASE_DATE", 1, 10)/>

1 个答案:

答案 0 :(得分:0)

经过一些更激烈的测试后,我终于通过使用子字符串来实现这一点:

<xsl:variable name="purchaseDate"><xsl:value-of select="./PURCHASE_DATE"/></xsl:variable><xsl:value-of select="substring($purchaseDate, 1, 10)"/>

虽然它可能不是处理日期最漂亮的方式,但作为输出我仍然认为它是一种有效的解决方法。