【发布时间】:2021-11-09 13:25:23
【问题描述】:
我希望使用变量来获得需要按后代顺序计算的日期,例如(2021 年 1 月 1 日,2020 年 1 月 1 日)。我已经简化了代码,它只处理年份。
我使用变量的原因是因为在较大的代码中我需要从 JSON 调用数据。
我发现了这个关于“descending counter”的问题,但答案是没有变量的。
问题:结果以升序排列。
数据源(XML/JSON):
本例中未使用。
您在此xsltfiddle 中找到相同的代码。
代码:
XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:output method="html" indent="yes" html-version="5"/>
<xsl:template match="data">
<xsl:for-each select="1 to 2">
<xsl:variable name="counter">
<xsl:number start-at="2016" value="position()"/>
</xsl:variable>
<xsl:value-of select="$counter"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
结果:
<!DOCTYPE HTML>20162017
想要的结果:
<!DOCTYPE HTML>20172016
【问题讨论】:
-
不清楚你想要达到什么目的,为什么又回到使用
xsl:number和position()。请注意,XSLT/XPath 2 及更高版本具有xs:date形式的日期数据类型,它还支持算术运算,例如减去一年:current-date() - xs:yearMonthDuration('P1Y')。最后,使用此类操作可能比使用for-each、xsl:number和position()以相当狂野的组合来输出日期值更有意义。 -
@MartinHonnen 我意识到确保字符串被视为日期是有意义的。我会接受这个建议。