xslt基于互斥元素排序

时间:2017-11-14 19:22:37

标签: xslt-2.0

我有一个xml数据,其中有2个日期元素<STRT_DT><STRT_BY_DT>。这两个要素是互斥的。我需要按日期按升序对这些日期的XML聚合进行排序。示例实例:

<EVNT>
 <LGL_EVNT>  <STRT_DT>2017-11-01</STRT_DT>  <EVNT_TYP_CD>10</EVNT_TYP_CD> </LGL_EVNT> <LGL_EVNT>  <STRT_BY_DT>2017-11-02</STRT_BY_DT>  <EVNT_TYP_CD>10</EVNT_TYP_CD> </LGL_EVNT> <LGL_EVNT>  <STRT_DT>2017-10-02</STRT_DT>  <EVNT_TYP_CD>10</EVNT_TYP_CD> </LGL_EVNT> <LGL_EVNT>  <STRT_BY_DT>2017-10-03</STRT_BY_DT>  <EVNT_TYP_CD>10</EVNT_TYP_CD> </LGL_EVNT> </EVNT>

预期输出是按升序获得法律事件汇总:

<EVNT> <LGL_EVNT>  <STRT_DT>2017-10-02</STRT_DT>  <EVNT_TYP_CD>10</EVNT_TYP_CD> </LGL_EVNT> <LGL_EVNT>  <STRT_BY_DT>2017-10-03</STRT_BY_DT>  <EVNT_TYP_CD>10</EVNT_TYP_CD> </LGL_EVNT> <LGL_EVNT>  <STRT_DT>2017-11-01</STRT_DT>  <EVNT_TYP_CD>10</EVNT_TYP_CD> </LGL_EVNT> <LGL_EVNT>  <STRT_BY_DT>2017-11-02</STRT_BY_DT>  <EVNT_TYP_CD>10</EVNT_TYP_CD> </LGL_EVNT> </EVNT>

我无法使用xslt 2.0基于这两个互斥元素进行排序。请帮忙。

1 个答案:

答案 0 :(得分:1)

只需使用xsl:sort,其中包含两个元素构成的两个日期序列,因为它们是互斥的,每个元素只有一个排序键:

<xsl:template match="EVNT">
    <xsl:copy>
        <xsl:apply-templates select="LGL_EVNT">
            <xsl:sort select="xs:date(STRT_DT) , xs:date(STRT_BY_DT)"/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>

将标识转换模板添加到该模板(或使用XSLT 3和<xsl:mode on-no-match="shallow-copy"/>)。