Имеем xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root xmlns:xsi="//www.w3.org/2001/XMLSchema-instance">
<item type="simple">
<pos>380</pos>
<name><![CDATA[Energy Standard Group S.A.]]></name>
<logo><![CDATA[esg.gif]]></logo>
<link><![CDATA[]]></link>
</item>
<item type="simple">
<pos>330</pos>
<name><![CDATA[Гранд Отель Европа]]></name>
<logo><![CDATA[gh_europe.gif]]></logo>
<link><![CDATA[]]></link>
</item>
</root>
Требуется вывести позиции, упорядоченные по номеру
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="//www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8"/>
<xsl:template match="/root">
<h4>Партнеры и спонсоры:</h4>
<ul>
<xsl:apply-templates select="item[@type='simple']" mode="item">
<xsl:sort order="ascending" select="number(pos)" data-type="number"/> //указываем направление сортировки
</xsl:apply-templates>
</ul>
</xsl:template>
<xsl:template match="item" mode="item">
<xsl:for-each select=".">
<li>
<xsl:choose>
<xsl:when test="link!=''"> //если присутствует ссылка
<a>
<xsl:attribute name="href">
<xsl:text>//</xsl:text>
<xsl:value-of select="link"/>
</xsl:attribute>
<xsl:if test="logo!=''"> //а есть ли картинка
<image>//создаем тег
<xsl:attribute name="src">
<xsl:text>/user_xml/sponsors/gif/</xsl:text>
<xsl:value-of select="logo"/>
</xsl:attribute>
</image>
</xsl:if>
</a>
</xsl:when>
<xsl:otherwise>
<xsl:if test="logo!=''"> //а есть ли картинка
<image>
<xsl:attribute name="src">
<xsl:text>/user_xml/sponsors/gif/</xsl:text>
<xsl:value-of select="logo"/>
</xsl:attribute>
</image>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Все это было хорошо до тех пор, пока не потребовалось вывести список, упорядоченный без учета регистра. Вопрос решился через известное место:
<xsl:apply-templates select="li" mode="item"><br> <xsl:sort order="ascending" select="fn:translate('.', 'абвгдежзийклмнопрстуфхцчшщэюя', 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЭЮЯ')" /> <br> </xsl:apply-templates>