使用 xsl:number 下降变量计数器

Descend variable counter using xsl:number

我希望使用变量来获得需要按后代顺序计算的日期,例如(2021-01-01, 2020-01-01)。我简化了代码,它只处理年份。

我使用变量的原因是因为在较大的代码中我需要从 JSON.

调用数据

我发现了这个关于“descending counter”的 SO 问题,但答案是在没有变量的情况下执行的。


问题:结果按升序排列

数据源(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: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>

可能有更简单的方法来完成它应该完成的任何事情。