Привет сборка универсальный шаблон для списка моего содержания. Но Содержание может быть отсортировано на различном или узел (). Поэтому хочу передать 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=""
РАБОТЫ.
Почему не может сделать этого на select=""
?
Я надеющийся сделать это супер динамичным избранная переменная могу быть xPtah или @publish или Заголовок/узел () или любой xPath.
Нет никакой ошибки - Это просто игнорирует вид.
Это сделано намеренно . Атрибут 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>
|
(оператор объединения) работает ... Должно быть, я ошибся, когда пытался раньше. Это был ответ @Dimitre Novatchev, который направил меня по правильному пути !!
Следующие работы:
<xsl:sort select="@*[name()=$sort] | *[name()=$sort]"
order="{$order}" data-type="text"/>
Это позволяет мне сортировать по атрибутам и узлам. Очевидно, если они не имеют одинакового name ()
, но имеют разные значения.