Эта таблица стилей:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Rota">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
<xsl:sort select="substring(date,7)"/>
<xsl:sort select="substring(date,4,2)"/>
<xsl:sort select="substring(date,1,2)"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
С этим входом:
<Rota>
<Shift>
<date>30/07/2010</date>
<title1>GM Specialised Medicine</title1>
<gm>Alison Watson</gm>
<title2>DDO Medicine & Cardio.</title2>
<director>Suzanne Marsello</director>
<nurse>n/a</nurse>
</Shift>
<Shift>
<date>23/07/2010</date>
<title1>GM Neurosciences</title1>
<gm>Katie Cusick</gm>
<title2>Chief Operating Officer</title2>
<director>Patrick Mitchell</director>
<nurse>n/a</nurse>
</Shift>
</Rota>
Выход:
<Rota>
<Shift>
<date>23/07/2010</date>
<title1>GM Neurosciences</title1>
<gm>Katie Cusick</gm>
<title2>Chief Operating Officer</title2>
<director>Patrick Mitchell</director>
<nurse>n/a</nurse>
</Shift>
<Shift>
<date>30/07/2010</date>
<title1>GM Specialised Medicine</title1>
<gm>Alison Watson</gm>
<title2>DDO Medicine & Cardio.</title2>
<director>Suzanne Marsello</director>
<nurse>n/a</nurse>
</Shift>
</Rota>
Также эта таблица стилей работает:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
<xsl:sort select="substring(date,7)"/>
<xsl:sort select="substring(date,4,2)"/>
<xsl:sort select="substring(date,1,2)"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Примечание : исправить подстроку. Я изменяю порядок ввода, потому что порядок по умолчанию возрастает. Если вы хотите нисходящий порядок, добавьте к xsl:sort
этот атрибут order="descending"
.
РЕДАКТИРОВАТЬ : Неверная подстрока. Кроме того, почему вы не делаете все с XSLT? Как пример, эта таблица стилей:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="startDate" select="20100715"/>
<xsl:param name="endDate" select="$startDate + 100"/>
<xsl:template match="Rota">
<table>
<tr>
<th>Date</th>
<th>Title</th>
<th>GM</th>
<th>Title</th>
<th>Director</th>
<th>Nurse / Matron</th>
</tr>
<xsl:apply-templates select="Shift[concat(substring(date,7),
substring(date,4,2),
substring(date,1,2))
>= $startDate]
[$endDate >=
concat(substring(date,7),
substring(date,4,2),
substring(date,1,2))]">
<xsl:sort select="substring(date,7)"/>
<xsl:sort select="substring(date,4,2)"/>
<xsl:sort select="substring(date,1,2)"/>
</xsl:apply-templates>
</table>
</xsl:template>
<xsl:template match="Shift">
<tr>
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:template match="Shift/*">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
</xsl:stylesheet>
Выход:
<table>
<tr>
<th>Date</th>
<th>Title</th>
<th>GM</th>
<th>Title</th>
<th>Director</th>
<th>Nurse / Matron</th>
</tr>
<tr>
<td>23/07/2010</td>
<td>GM Neurosciences</td>
<td>Katie Cusick</td>
<td>Chief Operating Officer</td>
<td>Patrick Mitchell</td>
<td>n/a</td>
</tr>
<tr>
<td>30/07/2010</td>
<td>GM Specialised Medicine</td>
<td>Alison Watson</td>
<td>DDO Medicine & Cardio.</td>
<td>Suzanne Marsello</td>
<td>n/a</td>
</tr>
</table>