我有一个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基于这两个互斥元素进行排序。请帮忙。
答案 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"/>
)。