从字符串到数字 xslt
from string to number xslt
我想比较两个不同的日期。为了实现这一点,我想转换为数字。
输入示例:
<file>
<date>2015-11-06 09:00/>
</file>
<history>
<date>2016-01-12 10:00/>
</history>
首先我从日期中提取时间。并将结果放入 var.
<xsl:for-each select="//item/metadata/document/file/date">
<xsl:variable name="d_log"
select="substring-before(., ' ')" as="xs:string"/>
因此变量的值将是,例如 2015-11-06。
下一步是,我想将 2015-11-06 转换为 20151106。
问题是如何将字符串转换为数字?
或者有更简单的方法吗?
你可以这样做:
translate(substring-before(., ' '), '-', '')
得到预期的数字。
但是,您的语法表明您使用的是 XSLT 2.0。如果是这样,为什么不将给定的字符串转换为 xs:date
或 xs:dateTime
并将它们进行比较?
这是我的结果。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output method="xml" indent="yes"></xsl:output>
<xsl:template match="/">
<aaa>
<xsl:for-each select="//item/metadata/document/file/date">
<xsl:variable name="d_log"
select="translate(substring-before(., ' '), '-', '')"
as="xs:string"/>
<xsl:for-each select="../../history/log/date">
<xsl:variable name="d_doc" select="translate(substring-before(., ' '), '-', '')" as="xs:string"/>
<xsl:if test="$d_doc > $d_log">
<bb>
<xsl:value-of select="node()"/>
</bb>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</aaa>
</xsl:template>
</xsl:stylesheet>
我想比较两个不同的日期。为了实现这一点,我想转换为数字。 输入示例:
<file>
<date>2015-11-06 09:00/>
</file>
<history>
<date>2016-01-12 10:00/>
</history>
首先我从日期中提取时间。并将结果放入 var.
<xsl:for-each select="//item/metadata/document/file/date">
<xsl:variable name="d_log"
select="substring-before(., ' ')" as="xs:string"/>
因此变量的值将是,例如 2015-11-06。 下一步是,我想将 2015-11-06 转换为 20151106。
问题是如何将字符串转换为数字? 或者有更简单的方法吗?
你可以这样做:
translate(substring-before(., ' '), '-', '')
得到预期的数字。
但是,您的语法表明您使用的是 XSLT 2.0。如果是这样,为什么不将给定的字符串转换为 xs:date
或 xs:dateTime
并将它们进行比较?
这是我的结果。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output method="xml" indent="yes"></xsl:output>
<xsl:template match="/">
<aaa>
<xsl:for-each select="//item/metadata/document/file/date">
<xsl:variable name="d_log"
select="translate(substring-before(., ' '), '-', '')"
as="xs:string"/>
<xsl:for-each select="../../history/log/date">
<xsl:variable name="d_doc" select="translate(substring-before(., ' '), '-', '')" as="xs:string"/>
<xsl:if test="$d_doc > $d_log">
<bb>
<xsl:value-of select="node()"/>
</bb>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</aaa>
</xsl:template>
</xsl:stylesheet>