我有一个像下面这样的xml:
Length10000000000000000000000
m is: 2147483647 and has a max value: 2147483647
我想将日期格式更改为ISO 8601.并使用xslt更新日期标记的值。 输出xml应该是这样的
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<properties>
<entry key="date">11-15-2017 22:45:59</entry>
</properties>
我已经使用转换后的日期值定义了一个变量。我正在使用这个xslt但没有获得所需的输出。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<properties>
<entry key="date">11-15-2017T22:45:59Z</entry>
</properties>
有人可以帮我解决这个问题,因为我是XSLT的新手。
答案 0 :(得分:1)
尝试这样的事情:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="entry[@key='date']">
<xsl:variable name="dateparam" select="."/>
<xsl:variable name="dd" select="xs:date(substring-before(., ' '))"/>
<xsl:variable name="tt" select="xs:time(substring-after(., ' '))"/>
<xsl:variable name="dt" select="dateTime($dd, $tt)"/>
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:value-of select="format-dateTime($dt,
'[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]Z')"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>
</xsl:transform>
顺便说一下:<xsl:text>{$dateparam}</xsl:text>
无效。
改为使用<xsl:value-of select="$dateparam"/>
。
答案 1 :(得分:1)
要获得您要求的输出,您只需将xsl:variable
更改为:
<xsl:variable name="dateparam" select="/properties/entry[@key='date']"/>
但是,请求的输出(11-15-2017T22:45:59Z
)不是有效的dateTime。
这就是我要做的事情:
XSLT 2.0
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:variable name="dateparam" select="/properties/entry[@key='date']"/>
<xsl:template match="entry[@key='date']">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:value-of select="replace(normalize-space($dateparam),
'^(\d{2})-(\d{2})-(\d{4})\s+(.*)','$3-$1-$2T$4Z')"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<properties>
<entry key="date">2017-11-15T22:45:59Z</entry>
</properties>