Рассмотрим следующий входной XML:
<catalog>
<cd>
<artist>Dolly Parton</artist>
<year>1982</year>
</cd>
<cd>
<artist>Christians</artist>
<year>2005</year>
</cd>
<cd>
<artist>Bonnie Tyler</artist>
<year>1982</year>
</cd>
<cd>
<artist>Abba</artist>
<year>2001</year>
</cd>
</catalog>
В приведенном ниже примере представлены данные, отсортированные по исполнителю с использованием <xsl:sort>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Artist</th>
<th style="text-align:left">Year</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:sort select="artist" />
<tr>
<td><xsl:value-of select="artist"/></td>
<td><xsl:value-of select="year"/></td>
</tr>
</xsl:for-each>
</table>
То, что я не могу понять, этокак отсортировать мои данные, если XSL не содержит явного <xsl:for-each
, но за циклом позаботится <xsl:apply-templates
, как в следующем примере.Я пытался использовать <xsl:sort
прямо под строкой с <xsl:template match
, но это дает мне ошибку element sort is not allowed within that context
.
<xsl:template match="/">
<xsl:apply-templates select="/catalog/cd" />
</xsl:template>
<xsl:template match="/catalog/cd[year='1982']">
Artist = <xsl:value-of select="artist" />
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="/catalog/cd[year!='1982']">
</xsl:template>