С учетом следующего XML:
<?xml version="1.0"?>
<Things>
<Thing>
<Thing ID="0002"/>
<Name>Bob</Name>
</Thing>
<Thing>
<Thing ID="0003"/>
<Name>Alice</Name>
</Thing>
<Thing>
<Thing ID="0001"/>
<Name>Carol</Name>
</Thing>
</Things>
Я хочу вывести тот же XML, отсортированный по атрибуту ID. Следующая таблица стилей делает то, что я хочу. Закомментированный xsl:sort
(и несколько вариантов, которые я пробовал) не работает - я просто получаю несортированную копию оригинального документа. (И никаких сообщений об ошибках.)
Как конкретно выбрать атрибут ID для элемента Thing (чтобы не использовать атрибуты ID для других элементов, которые могут присутствовать в документе большего размера)?
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="Things">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="*/@ID" data-type="number"/>
<!-- I don't understand why this doesn't work:
<xsl:sort select="Thing/Thing[@ID]" data-type="number"/>
-->
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>