当前位置: 首页 > 知识库问答 >
问题:

如何使用XSLT动态生成从当前日期到2018-10-01年的月份开始日期?

华星文
2023-03-14

我是XSLT代码新手,需要专家的帮助。我有一个需求,从2018-10-01(YYYY-MM-DD)到上个月的月初,即2019-04-01(本月为5月1日),动态生成月初。所以每个月当我们运行这个XSLT代码时,都会将前一个月添加到代码片段中。

我尝试使用下面的函数也包括名称空间,如下所示:xmlns:xs=“http://www.w3.org/1999/xsl/transform”xmlns:xs=“http://www.w3.org/2001/xmlschema”xmlns:functx=“http://www.functx.com”xmlns:fn=“http://www.w3.org/2005/xpath-functions”。

但它说“找不到名为{http://www.functx.com}yearMonthDuration()的2参数函数”。我将它与Oxygen XML编辑器一起使用。

<?xml version="1.0" encoding="UTF-8"?>
<Year> 
<Month>2018-10-01</Month>     <Month>2018-11-01</Month>     <Month>2018-12-01</Month>     <Month>2019-01-01</Month>     <Month>2019-02-01</Month>     <Month>2019-03-01</Month>    <Month>2019-04-01</Month>      </Year>

共有1个答案

鲜于峰
2023-03-14

使用XSLT2.0处理程序,以下样式表:

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>

<xsl:template match="/">
    <Year>
        <xsl:call-template name="enumerate-dates"/>
    </Year>
</xsl:template>

<xsl:template name="enumerate-dates">
    <xsl:param name="startdate" as="xs:date" select="xs:date('2018-10-01')"/>
    <xsl:if test="$startdate le current-date() - xs:yearMonthDuration('P1M')">
        <Month>
            <xsl:value-of select="$startdate" />
        </Month>
        <xsl:call-template name="enumerate-dates">
            <xsl:with-param name="startdate" select="$startdate + xs:yearMonthDuration('P1M')" />
        </xsl:call-template>
    </xsl:if>
</xsl:template>

</xsl:stylesheet>

应用于任何XML输入,将返回(2019年5月当月):

<?xml version="1.0" encoding="utf-8"?>
<Year>
   <Month>2018-10-01</Month>
   <Month>2018-11-01</Month>
   <Month>2018-12-01</Month>
   <Month>2019-01-01</Month>
   <Month>2019-02-01</Month>
   <Month>2019-03-01</Month>
   <Month>2019-04-01</Month>
</Year>
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>

<xsl:template match="/">
    <Year>
        <!-- 12*2018 + 10 + 1 = 242257 -->
        <xsl:for-each select="0 to 12*year-from-date(current-date()) + month-from-date(current-date()) - 24227">
            <Month>
                <xsl:value-of select="xs:date('2018-10-01') + xs:yearMonthDuration(concat('P', ., 'M'))" />
            </Month>
        </xsl:for-each>
    </Year>
</xsl:template>

</xsl:stylesheet>

演示:https://xsltfiddle.libertydevelopment.net/94rmq6W/1

 类似资料:
  • 问题内容: 如何从数据库中获取查询的开始日期和结束日期。 谢谢, 问题答案: http://sqltutorials.blogspot.com/2007/06/sql-first-and-last-day-of- month.html 唯一没有涉及的是如何获取当前日期…请参阅rexem的帖子。

  • 问题内容: 我需要Java中本月的开始日期和结束日期。当JSP页面加载了当前月份时,它将自动计算该月份的开始和结束日期。它应该与年份和月份无关。也就是说某个月有31天或30天或28天。这也应该满足a年。你能帮我吗? 例如,如果我在列表框中选择“五月”,则需要开始日期为1,结束日期为31。 问题答案: 你去了: PS:类只是两个值的一对。

  • 问题内容: 如何在Java中动态显示for循环中特定月份的日期,月份和年份? 问题答案: 这简要演示了Java 和类的一些基础知识。根据您的问题,这是我能做的最好的事情。

  • 问题内容: 我正在尝试提取今天日期的月份。我有这个 但是当出现消息对话框时,它会显示数字 ,今天是数字。如何设置它以显示它是星期几? 问题答案: 返回星期几。星期日为0,星期六为6。 请参阅Java文档 根据下面给出的评论

  • 问题内容: String febSt = “02/01/2014” ; String febEnd = “02/28/2014” ; 上面的代码是我的输入,我需要“ 03/01/2014”和“ 03/31/2014”作为输出。我尝试了更多代码,也使用了日历功能,但没有结果。从该程序中,我需要下个月的开始和结束日期。 我尝试了更多示例输入,如果我将这些日期作为下个月2月返回的输入,将在2月,4月,6

  • 我想使用excel来跟踪多年来我每个月有多少实习生。 有没有一种方法,我可以使用excel列出每个实习生工作的月数,如下所示,以便我能够将我每月有多少实习生放入图表中 感谢您的帮助!提前感谢:)