两个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
答案 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> </xsl:text>
<xsl:value-of select="concat(substring($to,1,4),'-',substring($to,5,2),'-',substring($to,7))"/>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>