使用 XSLT 格式化日期时间
Formatting date time using XSLT
我有一个要求,我必须在传入请求中格式化日期值。我能够提取该值,但它的格式不正确。
下面是输入请求:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<Invoice Version="3.0">
<Header>
<ThisDocumentIdentifier>
<DocumentIdentifier>0000001007128564</DocumentIdentifier>
</ThisDocumentIdentifier>
<ThisDocumentDateTime>
<DateTime DateTimeQualifier="On">20140429T031659Z</DateTime>
</ThisDocumentDateTime>
</Header>
</Invoice>
</soapenv:Body>
</soapenv:Envelope>
日期值为 20140429T031659Z
需要输出 2014-04-29T03:16:59Z
下面是代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:dp="http://www.datapower.com/extensions">
<xsl:template match="*[local-name()='DateTime']">
<xsl:variable name="FormatDatetime">
<xsl:value-of select="concat(substring(., 1, 4), '-', substring(., 5, 2), '-', substring(., 7, 2),substring(.,9,2),':',substring(.,11,2),':',substring(.,13,2),'Z')"/>
</xsl:variable>
<xsl:message dp:priority="debug"> Formatted date= <xsl:value-of select="$FormatDatetime"/>
</xsl:message>
</xsl:template>
</xsl:stylesheet>
这是我得到的输出
2014-04-29T0:31:65Z
由于某种原因,其中一个号码被删除了,我不确定为什么?
谁能告诉我哪里做错了?
我也添加了 'T'。
<xsl:value-of select="concat(substring(., 1, 4), '-', substring(., 5, 2), '-', substring(., 7, 2),'T',substring(.,9,2),':',substring(.,11,2),':',substring(.,13,2),'Z')"/>
得到的输出为
2014-04-29TT0:31:65Z
感谢 panhandel,这是更新后的工作代码。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:dp="http://www.datapower.com/extensions">
<xsl:template match="*[local-name()='DateTime']">
<xsl:variable name="FormatDatetime">
<xsl:value-of select="concat(substring(., 1, 4), '-', substring(., 5, 2), '-', substring(., 7, 2),substring(.,9,3),':',substring(.,11,2),':',substring(.,13,2),'Z')"/>
</xsl:variable>
<xsl:message dp:priority="debug"> Formatted date= <xsl:value-of select="$FormatDatetime"/>
</xsl:message>
</xsl:template>
</xsl:stylesheet>
您似乎使用 substring(.,9,2)
将 T03 部分缩短了一个字符。
应该是substring(.,9,3)
我有一个要求,我必须在传入请求中格式化日期值。我能够提取该值,但它的格式不正确。
下面是输入请求:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<Invoice Version="3.0">
<Header>
<ThisDocumentIdentifier>
<DocumentIdentifier>0000001007128564</DocumentIdentifier>
</ThisDocumentIdentifier>
<ThisDocumentDateTime>
<DateTime DateTimeQualifier="On">20140429T031659Z</DateTime>
</ThisDocumentDateTime>
</Header>
</Invoice>
</soapenv:Body>
</soapenv:Envelope>
日期值为 20140429T031659Z
需要输出 2014-04-29T03:16:59Z
下面是代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:dp="http://www.datapower.com/extensions">
<xsl:template match="*[local-name()='DateTime']">
<xsl:variable name="FormatDatetime">
<xsl:value-of select="concat(substring(., 1, 4), '-', substring(., 5, 2), '-', substring(., 7, 2),substring(.,9,2),':',substring(.,11,2),':',substring(.,13,2),'Z')"/>
</xsl:variable>
<xsl:message dp:priority="debug"> Formatted date= <xsl:value-of select="$FormatDatetime"/>
</xsl:message>
</xsl:template>
</xsl:stylesheet>
这是我得到的输出 2014-04-29T0:31:65Z
由于某种原因,其中一个号码被删除了,我不确定为什么?
谁能告诉我哪里做错了?
我也添加了 'T'。
<xsl:value-of select="concat(substring(., 1, 4), '-', substring(., 5, 2), '-', substring(., 7, 2),'T',substring(.,9,2),':',substring(.,11,2),':',substring(.,13,2),'Z')"/>
得到的输出为 2014-04-29TT0:31:65Z
感谢 panhandel,这是更新后的工作代码。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:dp="http://www.datapower.com/extensions">
<xsl:template match="*[local-name()='DateTime']">
<xsl:variable name="FormatDatetime">
<xsl:value-of select="concat(substring(., 1, 4), '-', substring(., 5, 2), '-', substring(., 7, 2),substring(.,9,3),':',substring(.,11,2),':',substring(.,13,2),'Z')"/>
</xsl:variable>
<xsl:message dp:priority="debug"> Formatted date= <xsl:value-of select="$FormatDatetime"/>
</xsl:message>
</xsl:template>
</xsl:stylesheet>
您似乎使用 substring(.,9,2)
将 T03 部分缩短了一个字符。
应该是substring(.,9,3)