Использование переменных в <xsl: sort select = "/" >
Привет, создайте общий шаблон, чтобы перечислить мой контент. Но контент можно сортировать по разным @или node(). Так что хотите передать xPath в.
<xsl:variable name="sort" select="@sortBy"/>
<xsl:variable name="order" select="@order"/>
<xsl:for-each select="Content[@type=$contentType]">
<xsl:sort select="$sort" order="{$order}" data-type="text"/>
<xsl:sort select="@update" order="{$order}" data-type="text"/>
<xsl:copy-of select="."/>
</xsl:for-each>
Использование переменной для перехода вверх или вниз в order=""
WORKS.
Почему это невозможно сделать на select=""
?
Я надеюсь, что эта супердинамическая переменная select может быть xPtah либо @publish, либо Title/ node() или любым xPath.
Нет ошибки - он просто игнорирует сортировку.
Ответы
Ответ 1
Это по дизайну. Атрибут select
является единственным, который не принимает AVT (Атрибут - Шаблоны значений).
Обычным решением является определение переменной с именем дочернего элемента, который должен использоваться в качестве ключа сортировки. Ниже приведен небольшой пример:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vsortKey" select="'b'"/>
<xsl:variable name="vsortOrder" select="'descending'"/>
<xsl:template match="/*">
<xsl:for-each select="*">
<xsl:sort select="*[name() = $vsortKey]" order="{$vsortOrder}"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к следующему XML-документу:
<t>
<a>
<b>2</b>
<c>4</c>
</a>
<a>
<b>5</b>
<c>6</c>
</a>
<a>
<b>1</b>
<c>7</c>
</a>
</t>
получен желаемый результат:
<a>
<b>5</b>
<c>6</c>
</a>
<a>
<b>2</b>
<c>4</c>
</a>
<a>
<b>1</b>
<c>7</c>
</a>
Ответ 2
Работает |
(оператор объединения)... Я, должно быть, немного ошибся, когда пытался это сделать. Это был ответ @Dimitre Novatchev, ведущий меня по правильному пути!
Следующие работы:
<xsl:sort select="@*[name()=$sort] | *[name()=$sort]"
order="{$order}" data-type="text"/>
Позволяет сортировать атрибуты и узлы. Очевидно, что до тех пор, пока они не имеют одинаковые name()
, а разные значения.