Это преобразование показывает, как это можно сделать :
<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="/*">
<contents>
<xsl:apply-templates>
<xsl:sort select="id" data-type="number"/>
</xsl:apply-templates>
</contents>
</xsl:template>
<xsl:template match="content">
Content Here
</xsl:template>
<xsl:template match="relatedcontent">
Relatedcontent Here
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному документу XML (исправлено, чтобы быть правильно сформированным):
<contents>
<content>
<id>3</id>
<text/>
</content>
<relatedcontent>
<id>2</id>
<text/>
</relatedcontent>
</contents>
желаемый, правильно отсортированный результат получается :
<contents>
Relatedcontent Here
Content Here
</contents>
Примечание :
Не использовать <xsl:for-each>
. Используется только <xsl:apply-templates>
.
Не использовать оператор объединения XPath (да, он называется оператор объединения , не имеет отношения к каналам).
Если в будущем в XML-документ будет добавлен третий элемент, который будет отсортирован по id
, это преобразование все равно будет работать без каких-либо изменений.