<TR>
<TD><xsl:apply-templates select='NAME'/></TD>
<TD><xsl:apply-templates select='MASS'/></TD>
<TD><xsl:apply-templates select='DAY'/></TD>
<TD><xsl:apply-templates select='DENSITY'/></TD>
</TR>
</xsl:template>
</xsl:stylesheet>
Вот результаты этого преобразования:
<HTML>
<HEAD>
<TITLE>
Planets
</TITLE>
</HEAD>
<BODY>
<H1>
Planets sorted by density
</Н1>
<TABLE>
<TR>
<TD>Planet</TD>
<TD>Mass</TD>
<TD>Day</TD>
<TD>Density</TD>
</TR>
<TR>
<TD>Venus</TD>
<TD>.815</TD>
<TD>116.75</TD>
<TD>.943</TD>
</TR>
<TR>
<TD>Mercury</TD>
<TD>.0553</TD>
<TD>58.65</TD>
<TD>.983</TD>
</TR>
<TR>
<TD>Earth</TD>
<TD>1</TD>
<TD>1</TD>
<TD>1</TD>
</TR>
</TABLE>
</BODY>
</HTML>
По умолчанию <xsl:sort>
производит сортировку в алфавитном порядке, что означает, что «10» располагается перед «2». Для осуществления сортировки в числовом порядке установите атрибут типа данных в «number»:
<xsl:sort data-type='number' select='DENSITY'/>
Убывающий порядок сортировки задается установкой у элемента <xsl:sort>
атрибута order в «descending». Можно также сортировать по значениям атрибута, например:
<xsl:apply-templates select='PLANETS>
<xsl:sort select='@SIZE'/>
</xsl:apply-templates>
НОВОЕ В XSLT 2.0
Одним из важных преимуществ XSLT 2.0 является поддержка схем XML, и W3C планирует внести в XSLT 2.0 возможность сортировки по любому типу данных, определенному в схеме документа, так же, как сейчас можно сортировать по строкам или числам.
Сортировка по нескольким критериям
Стоит отметить, что при сортировке можно применять несколько критериев — для этого просто примените несколько элементов <xsl:sort>
. Первый элемент <xsl:sort>
отсортирует данные по основному критерию, следующий элемент — по следующему основному критерию и т.д. Вот, например, как внутри элемента <xsl:apply- templates>
можно отсортировать планеты сначала по расстоянию, а затем по плотности (при этом планеты с одинаковым расстоянием от Солнца будут отсортированы по плотности):
<xsl:apply-templates>
<xsl:sort select='DISTANCE'/>
<xsl:sort select='DENSITY'/>
</xsl:apply-templates>
На этом мы заканчиваем обсуждение сортировки, и я перехожу к сопутствующей теме: нумерации.
Элемент <xsl:number>
При помощи элемента <xsl:number>
узлу в результирующем документе присваивается очередной номер. Например, можно перенумеровать абзацы в контракте или строфы в поэме. Можно даже перенумеровать части документа несколькими уровнями, как, например, «Paragraph 3.2.5.1.» и т.п.
Элемент <xsl:number>
обладает следующими атрибутами:
• level
(необязательный). Определяет, как будут присваиваться последовательные числа. Устанавливается в «single» (один), «multiple» (несколько) или «any» (любой). Значение по умолчанию — «single»;
• count
(необязательный). Определяет, какие узлы нужно подсчитывать. Устанавливается в образец;
• from
(необязательный). Определяет точку начала отсчета. Устанавливается в образец;
• value
(необязательный). Форматируемое число;