Поскольку вы используете XSLT 1.0, вам придется использовать технику, называемую Muenchian Grouping .
Для этого требования будет определен составной ключ, состоящий из date
части цепочки элементов <TRMBEGIN_Q>
и <TRMENDE_Q>
.
<xsl:key name="keyDate" match="SRO_IF_POLYTERMINE_PRO_PATIENT" use="concat(substring(TRMBEGIN_Q, 1, 10), '|', substring(TRMENDE_Q, 1, 10))" />
Далее, for-each
выполняется цикл для сгруппированных элементов, и в рамках этой группировки элементы сортируются по составным ключам, так что 21.06.2018
появляется до 23.06.2018
.
<xsl:for-each select="SRO_IF_POLYTERMINE_PRO_PATIENT[generate-id() = generate-id(key('keyDate',concat(substring(TRMBEGIN_Q, 1, 10), '|', substring(TRMENDE_Q, 1, 10)))[1])]">
<xsl:sort select="substring(key('keyDate', concat(substring(TRMBEGIN_Q, 1, 10), '|', substring(TRMENDE_Q, 1, 10)))/TRMBEGIN_Q, 1, 10)" />
....
</xsl:for-each>
Последний шаг - цикл внутри key
чтобы извлечь отдельные значения элементов в группе.В этом цикле была применена сортировка для части time
.
<xsl:for-each select="key('keyDate', concat(substring(TRMBEGIN_Q, 1, 10), '|', substring(TRMENDE_Q, 1, 10)))">
<xsl:sort select="substring(TRMBEGIN_Q, 12, 5)" />
....
</xsl:for-each>
Ниже приведен полный XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:strip-space elements="*" />
<xsl:key name="keyDate" match="SRO_IF_POLYTERMINE_PRO_PATIENT" use="concat(substring(TRMBEGIN_Q, 1, 10), '|', substring(TRMENDE_Q, 1, 10))" />
<xsl:template match="XML_DATA">
<table border="0" cellspacing="0" cellpadding="5">
<xsl:for-each select="SRO_IF_POLYTERMINE_PRO_PATIENT[generate-id() = generate-id(key('keyDate',concat(substring(TRMBEGIN_Q, 1, 10), '|', substring(TRMENDE_Q, 1, 10)))[1])]">
<xsl:sort select="substring(key('keyDate', concat(substring(TRMBEGIN_Q, 1, 10), '|', substring(TRMENDE_Q, 1, 10)))/TRMBEGIN_Q, 1, 10)" />
<tr>
<td colspan="2">
<b><xsl:value-of select="substring(key('keyDate', concat(substring(TRMBEGIN_Q, 1, 10), '|', substring(TRMENDE_Q, 1, 10)))/TRMBEGIN_Q, 1, 10)" /></b>
</td>
</tr>
<xsl:for-each select="key('keyDate', concat(substring(TRMBEGIN_Q, 1, 10), '|', substring(TRMENDE_Q, 1, 10)))">
<xsl:sort select="substring(TRMBEGIN_Q, 12, 5)" />
<tr>
<td><xsl:value-of select="concat(substring(TRMBEGIN_Q, 12, 5), ' - ', substring(TRMENDE_Q, 12, 5))" /></td>
<td><xsl:value-of select="XRO_PATNAME" /></td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
. В результате создается таблица HTML, которая выглядит следующим образом.