按xslt中的相似日期按连续日期和总和进行分组

时间:2018-02-25 20:41:48

标签: xslt xslt-2.0

大师 我尝试按连续日期打印数据行,并将每行中所有时间的总和计入一个汇总行,其中开始日期是关闭时间的第一天,结束日期是连续的最后一次关闭组。我使用下面的xslt并且它工作得非常好然而有可能出现在系统中取消时间的情况然后在同一天我可以获得单位的负值,在这种情况下我的xslt不能正常工作,因为我无法处理类似日期和类似类型的场景。任何建议请。

XML

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:mf="http://example.com/mf"
    exclude-result-prefixes="xs mf"
    version="3.0">

    <xsl:output method="text"/>
    <xsl:strip-space elements="*"/>

    <xsl:function name="mf:date" as="xs:date">
        <xsl:param name="input" as="xs:string"/>
        <xsl:sequence select="xs:date(substring($input, 1, 10))"/>
    </xsl:function>

    <xsl:function name="mf:line" as="xs:string">
        <xsl:param name="group" as="element(Time_Off)*"/>
        <xsl:value-of 
            select="$group[1]/../Worker_ID, 
            $group[1]/Type, 
            mf:date($group[1]/Date),
            mf:date($group[last()]/Date),
            sum($group/Units)"
            separator=","/>      
    </xsl:function>

    <xsl:template match="Worker">
        <xsl:for-each-group select="Time_Off" group-by="Type">
            <xsl:variable name="sorted-times" as="element(Time_Off)*">
                <xsl:perform-sort select="current-group()">
                    <xsl:sort select="mf:date(Date)"/>
                </xsl:perform-sort>
            </xsl:variable>
            <xsl:for-each-group select="$sorted-times" group-by="mf:date(Date) - xs:dayTimeDuration('P1D') * position()">
                <xsl:value-of select="mf:line(current-group()) || '&#10;'"/>
            </xsl:for-each-group>
        </xsl:for-each-group>
    </xsl:template>

</xsl:stylesheet>

XSLT:

12,Compassionate Leave,2018-02-01,2018-02-01,1
12,Compassionate Leave,2018-02-08,2018-02-08,1
12,Compassionate Leave,2018-02-08,2018-02-09,0
12,Statutory Holiday,2018-02-06,2018-02-07,2

我得到的输出如下:

12,Compassionate Leave,2018-02-01,2018-02-01,1
12,Compassionate Leave,2018-02-08,2018-02-09,1
12,Statutory Holiday,2018-02-06,2018-02-07,2

我想要的输出如下:

styles.content.getRight

0 个答案:

没有答案