首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较XSLT代码中的日期时出现无效日期问题

比较XSLT代码中的日期时出现无效日期问题
EN

Stack Overflow用户
提问于 2020-08-15 20:10:03
回答 2查看 41关注 0票数 0

我有一个要求,其中我必须验证两个方案:优惠开始日期应该在优惠结束日期之前,优惠开始日期帐户应该在帐户开始日期之后。如果没有满足任何场景,则应抛出错误。

优惠开始日期和优惠结束日期值将分别以空格分隔的格式出现在xml标记和xml标记中。

以下是示例xml代码:

代码语言:javascript
运行
复制
<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代码:

代码语言:javascript
运行
复制
<xsl:for-each select="Accounts/Account">
    <xsl:variable name="offerSDate" select="offerStartDate"/>
    <xsl:variable name="offerEDate" select="offerEndDate"/>
                
    <xsl:if test="$offerSDate &gt; xs:date(AccountStartDate)">
        <Error>
            <xsl:text>Error: Invalid offer Date &#xA;</xsl:text>
        </Error>
    </xsl:if>
    <xsl:if test="$offerSDate &gt; $offerEDate">
        <Error>
            <xsl:text>Error: Invalid offer Date &#xA;</xsl:text>
        </Error>
    </xsl:if>
</xsl:for-each>

在执行xslt代码后,我收到无效日期"2020-10-02 2020-11-02“问题。

EN

回答 2

Stack Overflow用户

发布于 2020-08-15 21:45:26

如果您想对offerStartDate中的每个日期进行单独的比较,那么您可以(在XSLT2.0中)这样做:

代码语言:javascript
运行
复制
    <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>

或者(取决于你的测试应该有什么含义):

代码语言:javascript
运行
复制
    <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>
票数 0
EN

Stack Overflow用户

发布于 2020-08-15 21:07:42

如果只使用XSLT,最简单的方法可能是将XML从:

代码语言:javascript
运行
复制
<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>

类似这样的东西:

代码语言:javascript
运行
复制
<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>
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63425887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档