【问题标题】:Remove node according to date in child根据子节点中的日期删除节点
【发布时间】:2022-09-27 16:29:54
【问题描述】:

使用 SAP CPI 作为工具和 Groovy 脚本,如果“Letter”节点的创建日期早于位于同一级别的其他节点,我需要删除它。

鉴于此 XML:

<root>
    <JobApplication>
        <OfferLetter>
            <Letter>
                <offerLetterId>699</offerLetterId>
                <createdBy>00004221</createdBy>
                <createDate>2022-09-15T13:20:17.000</createDate>
            </Letter>
            <Letter>
                <offerLetterId>724</offerLetterId>
                <createdBy>00001472</createdBy>
                <createDate>2022-09-26T13:27:39.000</createDate>
            </Letter>
        </OfferLetter>
    </JobApplication>
    <JobApplication>
        <OfferLetter>
            <Letter>
                <offerLetterId>723</offerLetterId>
                <createdBy>00001472</createdBy>
                <createDate>2022-09-26T13:27:04.000</createDate>
            </Letter>
        </OfferLetter>
    </JobApplication>
    <JobApplication>
        <OfferLetter>
            <Letter>
                <offerLetterId>695</offerLetterId>
                <createdBy>00001472</createdBy>
                <createDate>2022-09-03T14:02:37.000</createDate>
            </Letter>
        </OfferLetter>
    </JobApplication>
</root>

在第一个 JobApplication 节点中,它有两个“Letter”节点,我需要保留较新的节点:\"2022-09-26T13:27:39.000\"并删除另一个节点。

结果应该是这样的:

<root>
    <JobApplication>
        <OfferLetter>
            <Letter>
                <offerLetterId>724</offerLetterId>
                <createdBy>00001472</createdBy>
                <createDate>2022-09-26T13:27:39.000</createDate>
            </Letter>
        </OfferLetter>
    </JobApplication>
    <JobApplication>
        <OfferLetter>
            <Letter>
                <offerLetterId>723</offerLetterId>
                <createdBy>00001472</createdBy>
                <createDate>2022-09-26T13:27:04.000</createDate>
            </Letter>
        </OfferLetter>
    </JobApplication>
    <JobApplication>
        <OfferLetter>
            <Letter>
                <offerLetterId>695</offerLetterId>
                <createdBy>00001472</createdBy>
                <createDate>2022-09-03T14:02:37.000</createDate>
            </Letter>
        </OfferLetter>
    </JobApplication>
</root>

    标签: xml xslt groovy sap-pi


    【解决方案1】:

    使用 XSLT 3:

      <xsl:mode on-no-match="shallow-copy"/>
    
    
      <xsl:template match="OfferLetter/Letter[not(xs:dateTime(createDate) = max(../Letter/createDate/xs:dateTime(.)))]"/>
    

    在 XSLT 2 中,您需要删除 xsl:mode 声明并将其拼写为模板

    <xsl:template match="@* | node()">
      <xsl:copy>
        <xsl:apply-templates select="@* , node()"/>
      </xsl:copy>
    </xsl:template>
    

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 1970-01-01
      • 2017-07-11
      • 2017-03-19
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多