Я хочу отсортировать все элементы <text>
по значению атрибута top
.
Однако элемент должен быть отсортирован, только если его предыдущий брат имеет значение top
, которое превышает его владеет 2 или более единицами.
Например, следующие элементы
<text top="100">text 1</text>
<text top="99">text 2</text>
<text top="100">text 3</text>
<text top="99">text 4</text>
<text top="35">text 5</text>
<text top="40">text 6</text>
должны быть преобразованы в:
<text top="35">text 5</text>
<text top="40">text 6</text>
<text top="100">text 1</text>
<text top="99">text 2</text>
<text top="100">text 3</text>
<text top="99">text 4</text>
Так, чтобы группа:
<text top="100">text 1</text>
<text top="99">text 2</text>
<text top="100">text 3</text>
<text top="99">text 4</text>
остается неизменным после сортировки.
Время от времени я использую только XSLT и знаю только обычный подход к сортировке:
<xsl:for-each select="text">
<xsl:sort select="@top" />
<xsl:copy>
<xsl:copy-of select="./node()|./@*" />
</xsl:copy>
</xsl:for-each>
Но результат, которого я хочу достичь потребует какой-то пузырьковой сортировки.
Не уверен, выполнимо ли это с чистым XSLT. У меня процессор XSLT 2.0.