SOA转换中的XSLT映射以从上个月获取最大日期

问题描述 投票:0回答:1

我正在尝试创建XSLT映射以获得上个月的最后(最大)天。

例如,如果我将值2019-10-17传递给映射,则应返回2019-09-30我在这里使用的日期格式为YYYY-MM-DD。

试图从当前数据中获取月份,然后将其减去1,以便它将返回上一个月份。但是我无法获得上个月的最大日期。

xp20:month-from-dateTime (/ns0:ddSelecCorpoMasterOutputCollection/ns0:ddSelecCorpoMasterOutput/ns0:FROM_DATE_FILTER ) - 1

input- sysdateo / p-上个月的最大日期例如-i / p-2019-10-18o / p- 2019-09-30

提前感谢。

xslt transformation soa
1个回答
0
投票

如果您有权访问XPath 2.0日期/时间库,

((1)转换为xs:date

<xsl:variable name="d" select="xs:date($in)"/>

((2)提取月份中的日期:

<xsl:variable name="dom" select="day-from-date($d)"/>

((3)从日期中减去此天数:

<xsl:variable name="result" select="$dom - xs:dayTimeDuration('P1D')*dom"/>

0
投票

您可以在XSLT中使用此XPath-1.0表达式:

concat(substring-before(.,'-'),'-',substring(' 120102030405060708091011',substring-before(substring-after(.,'-'),'-')*2,2),'-',substring(' 313128313031303131303130',substring-before(substring-after(.,'-'),'-')*2,2))

这里上下文节点.用于转换。结合示例中的路径,表达式将如下所示:

concat(substring-before(/ns0:ddSelecCorpoMasterOutputCollection/ns0:ddSelecCorpoMasterOutput/ns0:FROM_DATE_FILTER,'-'),'-',substring(' 120102030405060708091011',substring-before(substring-after(/ns0:ddSelecCorpoMasterOutputCollection/ns0:ddSelecCorpoMasterOutput/ns0:FROM_DATE_FILTER,'-'),'-')*2,2),'-',substring(' 313128313031303131303130',substring-before(substring-after(/ns0:ddSelecCorpoMasterOutputCollection/ns0:ddSelecCorpoMasterOutput/ns0:FROM_DATE_FILTER,'-'),'-')*2,2))

请注意以下事实,即“ 2月”月份始终为28天。考虑到leap年,将需要更复杂的方法。

© www.soinside.com 2019 - 2024. All rights reserved.