使用Xslt的日期子集

时间:2014-01-31 03:53:53

标签: xslt-1.0 tibco

两个x ml,一个具有如下的日期范围

20130101-20131231
20120101-20121231
20110101-20111231

第二个x ml的日期如下所示,每个日期范围的begindate和enddate标签,这个x ml只有日期范围的子集。如何使用xslt

查找缺少的日期
2012-01-01
2012-12-31

结果应为

2013-01-01
2013-12-31

2011-01-01
2011-12-31

3 个答案:

答案 0 :(得分:0)

嗯,不确定为什么用“tibco”标记你的帖子 如果您想在tibco businessworks中执行此操作,则可以使用format-date()等函数 在您的映射函数中

如果您想在XSLT 1.0中执行此操作,只需在原始日期使用子字符串作为日/月/年来创建新的格式化日期,如下所述: Convert time string in XSLT

答案 1 :(得分:0)

它不是关于格式化日期,它是两个xml的一个是其他的子集,我们希望找到xmls子集中缺失的日期,这将是结果xml。

由于 阿贾伊

答案 2 :(得分:0)

下面是我使用的输入xml,其中date / main / date是主要的日期列表 和dates / main / check / dateRange是要检查的:

<dates>
<main>
    <date>20130101-20131231</date>
    <date>20120101-20121231</date>
    <date>20110101-20111231</date>
</main>
<check>
    <dateRange>
        <from>2012-01-01</from>
        <to>2012-12-31</to>
    </dateRange>
</check>
</dates>

现在,在XSLT之后,将此XML作为输入并提供所需的输出:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" method="text" />
<xsl:strip-space elements="*" />

<xsl:template match="/">
    <xsl:variable name="dateRange" select="//dateRange"/>
    <xsl:for-each select="dates/main/date[not(. = (for $var in $dateRange return concat(translate($var/from,'-',''),'-',translate($var/to,'-',''))))]">
        <xsl:call-template name="writeOut">
            <xsl:with-param name="date" select="."/>
        </xsl:call-template>
    </xsl:for-each>
</xsl:template>

<xsl:template name="writeOut">
    <xsl:param name="date"/>
    <xsl:variable name="from" select="substring-before($date,'-')"/>
    <xsl:variable name="to" select="substring-after($date,'-')"/>

    <xsl:value-of select="concat(substring($from,1,4),'-',substring($from,5,2),'-',substring($from,7))"/>
    <xsl:text>&#10;</xsl:text>
    <xsl:value-of select="concat(substring($to,1,4),'-',substring($to,5,2),'-',substring($to,7))"/>
    <xsl:text>&#10;&#10;</xsl:text>
</xsl:template>

</xsl:stylesheet>