我有一个要求,其中我必须验证两个方案:优惠开始日期应该在优惠结束日期之前,优惠开始日期帐户应该在帐户开始日期之后。如果没有满足任何场景,则应抛出错误。
优惠开始日期和优惠结束日期值将分别以空格分隔的格式出现在xml标记和xml标记中。
以下是示例xml代码:
<Accounts>
<Account>
<AccountStartDate>2020-12-01<AccountStartDate>
<offerStartDate>2020-10-02 2020-11-02</offerStartDate>
<offerEndDate>2019-10-02 2019-11-02</offerEndDate>
</Account>
</Accounts>
以下是示例xslt代码:
<xsl:for-each select="Accounts/Account">
<xsl:variable name="offerSDate" select="offerStartDate"/>
<xsl:variable name="offerEDate" select="offerEndDate"/>
<xsl:if test="$offerSDate > xs:date(AccountStartDate)">
<Error>
<xsl:text>Error: Invalid offer Date 
</xsl:text>
</Error>
</xsl:if>
<xsl:if test="$offerSDate > $offerEDate">
<Error>
<xsl:text>Error: Invalid offer Date 
</xsl:text>
</Error>
</xsl:if>
</xsl:for-each>
在执行xslt代码后,我收到无效日期"2020-10-02 2020-11-02“问题。
发布于 2020-08-15 21:45:26
如果您想对offerStartDate
中的每个日期进行单独的比较,那么您可以(在XSLT2.0中)这样做:
<xsl:for-each select="Account">
<xsl:if test="some $offerStartDate in tokenize(offerStartDate, ' ') satisfies xs:date($offerStartDate) gt xs:date(AccountStartDate)">
<Error>error message</Error>
</xsl:if>
</xsl:for-each>
或者(取决于你的测试应该有什么含义):
<xsl:for-each select="Account">
<xsl:if test="every $offerStartDate in tokenize(offerStartDate, ' ') satisfies xs:date($offerStartDate) gt xs:date(AccountStartDate)">
<Error>error message</Error>
</xsl:if>
</xsl:for-each>
发布于 2020-08-15 21:07:42
如果只使用XSLT,最简单的方法可能是将XML从:
<Accounts>
<Account>
<AccountStartDate>2020-12-01</AccountStartDate>
<offerStartDate>2020-10-02 2020-11-02</offerStartDate>
<offerEndDate>2019-10-02 2019-11-02</offerEndDate>
</Account>
</Accounts>
类似这样的东西:
<Accounts>
<Account>
<AccountStartDate>2020-12-01</AccountStartDate>
<offer>
<offerStartDate>2020-10-02</offerStartDate>
<offerEndDate>2019-10-02</offerEndDate>
</offer>
<offer>
<offerStartDate>2020-11-02</offerStartDate>
<offerEndDate>2019-11-02</offerEndDate>
</offer>
</Account>
</Accounts>
https://stackoverflow.com/questions/63425887
复制相似问题