Порядок ценностей - PullRequest
       6

Порядок ценностей

0 голосов
/ 16 октября 2008

Я пытаюсь упорядочить элементы на основе значения атрибута:

<xsl:apply-templates select="Question">
    <xsl:sort order="ascending" select="@Value"></xsl:sort>
</xsl:apply-templates>

Это упорядочивает их, но я мог бы иметь значения, такие как 1,2,3, ... 10, 11, ... 20, и он будет упорядочивать их 1,10,11, ... 2,20 .. 3. и т. Д.
Я также мог бы иметь значения, такие как 1.A, 1.B, 2.A, 2.B и т. Д.

Как мне упорядочить эти значения с учетом числового содержимого и буквенного значения в этом приоритете?

Ответы [ 3 ]

7 голосов
/ 16 октября 2008

Если вы знаете, что у каждого вопроса есть номер, состоящий из нескольких частей, вы можете обработать его двумя <xsl:sort> инструкциями:

<xsl:apply-templates select="Question">
  <xsl:sort select="substring-before(@Value, '.')" data-type="number" />
  <xsl:sort select="substring-after(@Value, '.')" />
</xsl:apply-templates>

Если некоторые числа могут состоять из нескольких частей, а некоторые нет, я думаю, что лучше всего сделать следующее:

<xsl:apply-templates select="Question">
  <xsl:sort select="substring-before(concat(@Value, '.'), '.')" data-type="number" />
  <xsl:sort select="substring-after(@Value, '.')" />
</xsl:apply-templates>

Дополнительная concat(@Value, '.') добавляет '.' в конец значения, так что substring-before() всегда получает число.

2 голосов
/ 16 октября 2008

Вы можете сортировать в числовом порядке, используя атрибут data-type:

<xsl:sort order="ascending" select="@Value" data-type="number"></xsl:sort>

Встроенная функция сортировки не поддерживает более сложный порядок (например, упомянутые вами составные ключи).

0 голосов
/ 16 октября 2008

Для сортировки номеров вы можете использовать это:

<xsl:template match="employees">
  <xsl:apply-templates>
    <xsl:sort select="salary" data-type="number"/>
  </xsl:apply-templates>
</xsl:template>

Обратите внимание, что атрибут data-type используется здесь . Для таких значений, как 1.A, 1.B, 2.A, 2.B, вы снова вернетесь к тексту и вам придется прибегнуть к умным вещам, которые, вероятно, прибегают к некрасивому вложению. Рассмотрим элемент xsl:number , который можно использовать интересными способами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...