使用 xsl:number 递减变量计数器
Posted
技术标签:
【中文标题】使用 xsl:number 递减变量计数器【英文标题】:Descend variable counter using xsl:number 【发布时间】: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 我意识到确保字符串被视为日期是有意义的。我会接受这个建议。
【参考方案1】:
这个例子似乎有些做作。也许这可以帮助你:
<xsl:for-each select="reverse(1 to 2)">
<xsl:variable name="counter">
<xsl:number start-at="2016" value="."/>
</xsl:variable>
<xsl:value-of select="$counter"/>
</xsl:for-each>
可能有一种更简单的方法来完成这应该完成的任何事情。
【讨论】:
以上是关于使用 xsl:number 递减变量计数器的主要内容,如果未能解决你的问题,请参考以下文章
shared_ptrs 是不是由于引用计数器原子递增/递减而遇到缓存未命中?
如何拦截进程外桌面 STA COM 到 STA COM 通信或引用计数递减?