Используя Переменные в <xsl:sort выбирают = “”/>

Привет сборка универсальный шаблон для списка моего содержания. Но Содержание может быть отсортировано на различном или узел (). Поэтому хочу передать 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.

Нет никакой ошибки - Это просто игнорирует вид.

12
задан Paul Fleming 18 October 2012 в 20:17
поделиться

2 ответа

Это сделано намеренно . Атрибут 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>
14
ответ дан 2 December 2019 в 21:02
поделиться

| (оператор объединения) работает ... Должно быть, я ошибся, когда пытался раньше. Это был ответ @Dimitre Novatchev, который направил меня по правильному пути !!

Следующие работы:

<xsl:sort select="@*[name()=$sort] | *[name()=$sort]" 
          order="{$order}" data-type="text"/>

Это позволяет мне сортировать по атрибутам и узлам. Очевидно, если они не имеют одинакового name () , но имеют разные значения.

0
ответ дан 2 December 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: