Перейти к содержанию

xsl:for-each-group

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

Доступен в XSLT 2.0 и более поздних версиях. Доступен во всех изданиях Saxon.

  • Категория: инструкция
  • Содержимое: ( xsl:sort* , sequence-constructor )
  • Допустимые родительские элементы: любой элемент XSLT, модель содержимого которого - sequence-constructor; любой литеральный элемент результата

Атрибуты

select
expression
Выражение для выбора узлов/значений.
group-by?
expression
Объединяет все элементы, имеющие одинаковое значение для ключа группировки. Ключ группировки может иметь несколько значений (последовательность значений), в этом случае элемент добавляется в более чем одну группу.
group-adjacent?
expression
Группирует вместе все элементы, имеющие одинаковое значение для ключа группировки, при условии, что они также являются соседними во входной последовательности. Это полезно, когда необходимо обернуть новый элемент вокруг последовательности связанных элементов в исходных документах, например, последовательности элементов <bullet>. В этом случае ключ группировки должен быть однозначным.
group-starting-with?
pattern
Обрабатывает элементы в заданной последовательности по очереди, начиная новую группу каждый раз, когда один из элементов соответствует заданному шаблону. Это полезно, например, при сопоставлении элемента <h2> и следующих за ним элементов <p>.
group-ending-with?
pattern
Обрабатывает элементы в заданной последовательности по очереди, закрывая текущую группу всякий раз, когда один из элементов соответствует заданному шаблону. Это полезно при подборе последовательности элементов, в которой последний элемент в группе имеет какой-либо отличительный атрибут, например, continued="no".
composite?
boolean
Может использоваться при группировке с помощью group-by или group-adjacent. Если установлено значение yes, то выражения group-by и group-adjacent могут оцениваться как последовательность, и группировка выполняется путем сравнения всей последовательности. Если установлено значение no (по умолчанию), то когда group-by оценивается в последовательность, соответствующий элемент имеет несколько ключей группировки и входит в несколько групп; в случае group-adjacent, ключ группировки, имеющий значение последовательности, является ошибкой.
collation?
{ uri }
Имя последовательности группировки, используемое при сравнении ключей группировки. Может использоваться при группировке с помощью group-by или group-adjacent. Если присутствует, то это должен быть URI свертки, использующий схему и путь http://www.w3.org/2013/collation/UCA, в этом случае он запрашивает использование алгоритма свертки Юникода, или же это свертка, иначе распознанная Saxon: см. раздел "Свертка".

Заметки по реализации Saxon

В ранних проектах XSLT 3.0 были введены новые атрибуты bind-group и bind-grouping-key; они больше не поддерживаются, начиная с версии Saxon 9.6.

Атрибут composite был реализован начиная с версии Saxon 9.6.

Начиная с версии 9.6, Saxon поддерживает потоковое группирование при использовании атрибутов group-adjacent, group-starting-with или group-ending-with. Потоковая группировка с атрибутом group-by стала доступна в релизах поддержки 9.7 и полностью поддерживается в Saxon 9.8 (в этом случае инструкция xsl:for-each-group должна появляться в xsl:fork).

Подробности

Существует четыре возможных способа определения группировки с использованием различных атрибутов: group-by, group-adjacent, group-starting-with и group-ending-with.

В XSLT 3.0 возможности инструкции xsl:for-each-group расширены за счет того, что шаблон, используемый в group-starting-with или group-ending-with, теперь может соответствовать как атомарным значениям, так и узлам.

Примеры

Примеры использования инструкции см. в спецификации XSLT 2.0.

Ссылки

См. также

Комментарии