Чтение онлайн

ЖАНРЫ

Холзнер Стивен

Шрифт:
Листинг 5.8. Второй пример <xsl:for-each>

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output method="xml"/>

 <xsl:template match="PLANETS">

<PLANETS>

<xsl:for-each select="PLANET">

<PLANET>

<xsl:for-each select="*">

<DATA>

<xsl:value-of select="."/>

</DATA>

</xsl:for-each>

</PLANET>

</xsl:for-each>

</PLANETS>

 </xsl:template>

</xsl:stylesheet>

И

вот результат:

<?xml version="1.0" encoding="UTF-8"?>

<PLANETS>

 <PLANET>

<DATA>Mercury</DATA>

<DATA>.0553</DATA>

<DATA>58.65</DATA>

<DATA>1516</DATA>

<DATA>.983</DATA>

<DATA>43.4</DATA>

 </PLANET>

 <PLANET>

<DATA>Venus</DATA>

<DATA>.815</DATA>

<DATA>116.75</DATA>

<DATA>3716</DATA>

<DATA>.943</DATA>

<DATA>66.8</DATA>

 </PLANET>

 <PLANET>

<DATA>Earth</DATA>

<DATA>1</DATA>

<DATA>1</DATA>

<DATA>2107</DATA>

<DATA>1</DATA>

<DATA>128.4</DATA>

 </PLANET>

</PLANETS>

Сортирующие элементы

При помощи элемента

<xsl:sort>
можно сортировать узлы. Этот элемент устанавливает порядок обработки узлов для
<xsl:apply-templates>
и
<xsl:for-each>
. В следующем списке перечислены атрибуты
<xsl:sort>
:

• 

select
(необязательный). Принимает значение выражения XPath, возвращающего набор узлов для сортировки. По умолчанию — «string(.)»;

• 

order
(необязательный). Задает порядок сортировки, устанавливается в «ascending» (по возрастанию) или «descending» (по убыванию);

• 

case-order
(необязательный).
Определяет, будут ли буквы в верхнем регистре располагаться перед буквами в нижнем регистре. Устанавливается в «upper-first» (сначала верхний) или «lower-first» (сначала нижний);

• 

lang
(необязательный). Задает язык, чьи соглашения о сортировке будут применяться. Устанавливается в код языка, допустимый в атрибуте
xml:lang
;

• 

data-type
(необязательный). Определяет, будет ли сортировка вестись в алфавитном или числовом порядке. Устанавливается в «
text
» (текст), «
number
» (число) или в
QName
.

Этот элемент не включает содержимое. Его следует применять внутри элементов <xsl:apply-templates> или <xsl:for-each> для сортировки наборов узлов, с которыми работают эти элементы.

В листинге 5.9 я только отсортирую элементы

<PLANET>
в
planets.xml
в возрастающем алфавитном порядке по их именам, используя
<xsl:for-each>
в упрощенной таблице стилей.

Листинг 5.9. Сортировка данных

<HTML xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="1.0">

 <HEAD>

<TITLE>

The Sorted Planets Table

</TITLE>

 </HEAD>

 <BODY>

<H1>

The Sorted Planets Table

</H1>

<TABLE BORDER="2">

<TR>

<TD>Name</TD>

<TD>Mass</TD>

<TD>Radius</TD>

<TD>Day</TD>

</TR>

<xsl:for-each select="//PLANET">

<xsl:sort/>

<TR>

<TD><xsl:value-of select="NAME"/></TD>

<TD><xsl:value-of select="MASS"/></TD>

<TD><xsl:value-of select="RADIUS"/></TD>

<TD><xsl:value-of select="DAY"/></TD>

</TR>

</xsl:for-each>

</TABLE>

 </BODY>

</HTML>

А вот результат. Обратите внимание на то, что планеты действительно отсортированы как Earth, Mercury и затем Venus:

<HTML>

 <HEAD>

<TITLE>

The Sorted Planets Table

</TITLE>

 </HEAD>

 <BODY>

Поделиться с друзьями: