使用 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>

结果:

&lt;!DOCTYPE HTML&gt;20162017

想要的结果:

&lt;!DOCTYPE HTML&gt;20172016

【问题讨论】:

不清楚你想要达到什么目的,为什么又回到使用xsl:numberposition()。请注意,XSLT/XPath 2 及更高版本具有xs:date 形式的日期数据类型,它还支持算术运算,例如减去一年:current-date() - xs:yearMonthDuration('P1Y')。最后,使用此类操作可能比使用for-eachxsl:numberposition() 以相当狂野的组合来输出日期值更有意义。 @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 通信或引用计数递减?

表中的递增/递减计数值取决于使用 postgresql 中的触发器插入/删除另一个表的特定列值

多个fa-heart像计数递增和递减

如何配置STM32定时器在每次递增/递减时触发中断?