Динамический порядок сортировки с XSL - PullRequest
0 голосов
/ 06 июня 2011

Я хочу иметь возможность сортировать элементы на основе атрибута в моем XML. К сожалению, я не могу заставить его работать, вот мой код.

В настоящее время ошибок не возникает, но сортировка, похоже, никогда не применяется по убыванию.

        <xsl:variable name="sortOrder">
            <xsl:choose>
                <xsl:when test="Lanes/@flip = 1">descending</xsl:when>
                <xsl:otherwise>ascending</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

        <xsl:for-each select="Entry">
            <xsl:sort data-type="number" select="@id" order="{$sortOrder}"/>
        </xsl:for-each>

XML:

        <Lanes flip="1">
            <Entry id="1" value="0"/>
            <Entry id="2" value="0"/>
        </Lanes>

1 Ответ

1 голос
/ 06 июня 2011
    <xsl:for-each select="Entry">
        <xsl:sort data-type="number" select="@id" order="{$sortOrder}"/>
    </xsl:for-each>

Тестовый набор для вашего образца:

<xml>
  <Lanes flip="1">
    <Entry id="1" value="0"/>
    <Entry id="2" value="0"/>
  </Lanes>
  <Lanes flip="0">
    <Entry id="1" value="0"/>
    <Entry id="2" value="0"/>
  </Lanes>
</xml>

XSL

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
  <xsl:output indent="yes" />

  <xsl:template match="node() | @*">
    <xsl:copy>
      <xsl:apply-templates select="node() | @*" />
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Lanes">
    <xsl:copy>
      <xsl:variable name="sortOrder">
        <xsl:choose>
          <xsl:when test="@flip = 1">descending</xsl:when>
          <xsl:otherwise>ascending</xsl:otherwise>
        </xsl:choose>
      </xsl:variable>
      <xsl:apply-templates select="Entry">
        <xsl:sort data-type="number" select="@id" order="{$sortOrder}" />
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

Вывод для меня:

<xml>
  <Lanes>
    <Entry id="2" value="0"></Entry>
    <Entry id="1" value="0"></Entry>
  </Lanes>
  <Lanes>
    <Entry id="1" value="0"></Entry>
    <Entry id="2" value="0"></Entry>
  </Lanes>
</xml>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...