Xslt 如何在xsl中比较日期的年份?

Xslt 如何在xsl中比较日期的年份?,xslt,xpath,xslt-1.0,Xslt,Xpath,Xslt 1.0,如何将给定日期的年份与int进行比较 <if test="year(@varDate)>=1900"> true </if> 符合事实的 其中,输入文件中的日期格式为: <date varDate="31/12/1999" /> 如果您坚持使用XSLT 1.0,最常见的方法是提取年份部分,如下所示: substring-before('1994-12-31', '-') 或者,如果您的格式是,比如说dd/MM/yyyy,您可以执行以下操作: 在

如何将给定日期的年份与int进行比较

<if test="year(@varDate)>=1900">
true
</if>

符合事实的
其中,输入文件中的日期格式为:

<date varDate="31/12/1999" />

如果您坚持使用XSLT 1.0,最常见的方法是提取年份部分,如下所示:

substring-before('1994-12-31', '-')
或者,如果您的格式是,比如说
dd/MM/yyyy
,您可以执行以下操作:

在你的情况下,这将是沿着以下思路:

<xsl:if test="substring-after('31/12/1999', '/') > 1900">
    true
</xsl:if>

1这是不够的,因为有两个斜杠,在后面使用
子字符串(在('31/12/1999','/'),'/'),'/'))
,如(归功于他)中所示

事实证明,我的日期格式与上面的解决方案不同 (年月日)

如果这真的是您的日期格式-即天和月总是填充为两位数-您可以使用:

<if test="substring(@varDate, 7) >= 1900">

作为你的测试

如果没有,您需要:

<if test="substring-after(substring-after(@varDate, '/'), '/') >= 1900">


请向我们显示日期所在的XML输入。您标记了您的问题,但您的代码显示的是XSLT 2.0的构造函数
xs:gYear
,您的意思是标记为吗?请向我们显示日期所在的XML输入,并指出是使用XSLT 1.0还是使用XSLT 2.0(在本例中有很大区别)。“如何确定我使用的版本”您可以通过使用
系统属性('xsl:version')
,或者通过简单地创建XSLT 2.0构造,即将version属性设置为2.0,并尝试添加
use when=“true()“
到您现有的任何说明。如果收到错误,则表示您使用的是XSLT 1.0(某些XSLT 1.0处理程序会忽略版本属性)。在XSLT 1.0中,不需要转换为数字。@Abel,因此我的日期的格式与上述解决方案(dd/mm/yyyy)中的格式不同。有什么想法吗?我应该创建一个新的post吗?@Rod,只需在(x,“/”)之后将表达式更改为
子字符串即可。我更新了答案(以及你的问题)。非常感谢@Abel和所有人的洞察力
<if test="substring(@varDate, 7) >= 1900">
<if test="substring-after(substring-after(@varDate, '/'), '/') >= 1900">