如何将'date'格式转换为UTC格式
How to convert 'date' format to UTC format
在下面的示例中,我们试图将 'date' 从一种格式转换为另一种格式,就像要转换成 UTC 格式一样,例如2021-07-26T18:37:15.490Z
谁能帮忙。
输入XML:
<?xml version="1.0" encoding="UTF-8"?>
<date>
<finish_dstamp>20190716140831</finish_dstamp>
</date>
现有输出:
<?xml version="1.0" encoding="UTF-8"?>
<date>
<finish_dstamp>20190716140831</finish_dstamp>
</date>
XSLT 代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
您还可以使用正则表达式解析日期和时间组件。构造日期时间值的正则表达式和捕获组示例(您也可以将其解析为日期时间以确保有效)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="2.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="finish_dstamp/text()">
<xsl:sequence select="replace(., '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', '--T::')"/>
</xsl:template>
</xsl:stylesheet>
使用 xsl:analyze-string
的示例:
<xsl:template match="finish_dstamp/text()">
<xsl:analyze-string select="." regex="(\d{{4}})(\d{{2}})(\d{{2}})(\d{{2}})(\d{{2}})(\d{{2}})">
<xsl:matching-substring>
<xsl:sequence select="xs:dateTime(
string-join((
string-join((regex-group(1),regex-group(2),regex-group(3)), '-'),
string-join((regex-group(4),regex-group(5),regex-group(6)), ':')),
'T')) "></xsl:sequence>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:sequence select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
您可以解析出日期和时间的组成部分,然后使用带有 xs:date()
和 xs:time()
参数的 fn:dateTime()
函数,并将其放入专门的模板匹配finish_dstamp/text()
节点:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="2.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="finish_dstamp/text()">
<xsl:sequence select="dateTime(
xs:date(
concat(
substring(., 1, 4),
'-',
substring(., 5, 2),
'-',
substring(., 7, 2)
)
),
xs:time(
concat(
substring(., 9, 2),
':',
substring(., 11, 2),
':',
substring(., 13, 2)
)
)
)"/>
</xsl:template>
</xsl:stylesheet>
您可以解析出 dateTime 的组成部分并使用 xs:dateTime()
构造函数:
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="finish_dstamp/text()">
<xsl:sequence select="xs:dateTime(
concat(
substring(., 1, 4),
'-',
substring(., 5, 2),
'-',
substring(., 7, 2),
'T',
substring(., 9, 2),
':',
substring(., 11, 2),
':',
substring(., 13, 2)
)
)"/>
</xsl:template>
在下面的示例中,我们试图将 'date' 从一种格式转换为另一种格式,就像要转换成 UTC 格式一样,例如2021-07-26T18:37:15.490Z
谁能帮忙。
输入XML:
<?xml version="1.0" encoding="UTF-8"?>
<date>
<finish_dstamp>20190716140831</finish_dstamp>
</date>
现有输出:
<?xml version="1.0" encoding="UTF-8"?>
<date>
<finish_dstamp>20190716140831</finish_dstamp>
</date>
XSLT 代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
您还可以使用正则表达式解析日期和时间组件。构造日期时间值的正则表达式和捕获组示例(您也可以将其解析为日期时间以确保有效)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="2.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="finish_dstamp/text()">
<xsl:sequence select="replace(., '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', '--T::')"/>
</xsl:template>
</xsl:stylesheet>
使用 xsl:analyze-string
的示例:
<xsl:template match="finish_dstamp/text()">
<xsl:analyze-string select="." regex="(\d{{4}})(\d{{2}})(\d{{2}})(\d{{2}})(\d{{2}})(\d{{2}})">
<xsl:matching-substring>
<xsl:sequence select="xs:dateTime(
string-join((
string-join((regex-group(1),regex-group(2),regex-group(3)), '-'),
string-join((regex-group(4),regex-group(5),regex-group(6)), ':')),
'T')) "></xsl:sequence>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:sequence select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
您可以解析出日期和时间的组成部分,然后使用带有 xs:date()
和 xs:time()
参数的 fn:dateTime()
函数,并将其放入专门的模板匹配finish_dstamp/text()
节点:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="2.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="finish_dstamp/text()">
<xsl:sequence select="dateTime(
xs:date(
concat(
substring(., 1, 4),
'-',
substring(., 5, 2),
'-',
substring(., 7, 2)
)
),
xs:time(
concat(
substring(., 9, 2),
':',
substring(., 11, 2),
':',
substring(., 13, 2)
)
)
)"/>
</xsl:template>
</xsl:stylesheet>
您可以解析出 dateTime 的组成部分并使用 xs:dateTime()
构造函数:
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="finish_dstamp/text()">
<xsl:sequence select="xs:dateTime(
concat(
substring(., 1, 4),
'-',
substring(., 5, 2),
'-',
substring(., 7, 2),
'T',
substring(., 9, 2),
':',
substring(., 11, 2),
':',
substring(., 13, 2)
)
)"/>
</xsl:template>