@ Ответ Джима в основном правильный.
Однако применяется к чуть более реалистичному XML-документу, такому как :
<Data version="2.0">
<Group>
<Item>3</Item>
<Item>1</Item>
<Item>10</Item>
<Item>2</Item>
</Group>
<Group>
<Item>7</Item>
<Item>5</Item>
</Group>
</Data>
полученный результат явно не то, что вы хотите (10 предшествует 2 и 3):
<?xml version="1.0" encoding="utf-8"?>
<Data version="2.0">
<Group>
<Item>1</Item>
<Item>10</Item>
<Item>2</Item>
<Item>3</Item>
</Group>
<Group>
<Item>5</Item>
<Item>7</Item>
</Group>
</Data>
Вот правильное решение (это такженемного короче):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Group">
<Group>
<xsl:apply-templates select="*">
<xsl:sort data-type="number"/>
</xsl:apply-templates>
</Group>
</xsl:template>
</xsl:stylesheet>
когда это преобразование применяется к тому же XML-документу (см. выше), будет получен требуемый, правильный результат :
<Data version="2.0">
<Group>
<Item>1</Item>
<Item>2</Item>
<Item>3</Item>
<Item>10</Item>
</Group>
<Group>
<Item>5</Item>
<Item>7</Item>
</Group>
</Data>
Объяснение : Использование атрибута data-type
<xsl:sort>
, чтобы указать, что значение ключей сортировки следует рассматривать как число, а не как (по умолчанию)строка.