Описание тега xslt-grouping

Механизмы группировки, специфичные для XSLT. Всегда должен дополняться тегом xslt-1.0, xslt-2.0 или xslt-3.0, чтобы указать используемую версию.

Группировка в XSLT 3

Группировка в XSLT 3, текущей и последней версии XSLT с 2017 года, может быть достигнута в первую очередь с помощью xsl:for-each-groupинструкция, в которой вы выбираете элементы для группировки, группирующую совокупность, сselect атрибут, а затем есть три разных способа группировки населения:

  1. то group-by атрибут, выбирающий последовательность ключей группировки, по которой группируемая совокупность должна быть сгруппирована
  2. то group-adjacent атрибут, выбирающий последовательность ключей группировки, по которой должны быть сгруппированы смежные элементы совокупности
  3. то group-starting-with или group-ending-with атрибуты, определяющие шаблоны для идентификации и запуска групп на основе сопоставления с образцом начального (group-starting-with) или финал (group-ending-with) член группы

Доступ к элементам обрабатываемой в данный момент группы предоставляется current-group()функция, доступ к текущей клавише группировки current-grouping-key()функция.

Спецификация XSLT 3 дает по крайней мере один пример для каждого подхода к группировке непосредственно в разделе спецификации https://www.w3.org/TR/xslt-30/; ниже вы найдете ссылки на скрипты XSLT, основанные на этих примерах:

Конечно, разные подходы могут быть объединены для более сложных задач путем вложения xsl:for-each-group инструкции.

XSLT 3 с поддержкой XPath 3.1 также может группировать JSON, представленные в виде карт и массивов XPath 3.1, вот список, показывающий предыдущие образцы группировки XML, теперь использующие ввод JSON и напрямую группирующие структуру данных карты / массива, возвращенную parse-jsonфункция:

Группировка в XSLT 2

Группировка в XSLT 2 также работает с xsl:for-each-groupинструкция как в XSLT 3, основные ограничения, что XSLT 2 не поддерживает составные ключи группировки (так сгруппировать по различным пунктам необходимоconcat или string-join их как одно значение (например, composite="yes" group-by="foo, bar" в XSLT 3 нужно делать как group-by="string-join((foo, bar), '|')")) и что сопоставление с образцом может выполняться только на узлах, а не на примитивных значениях.

Спецификация XSLT 2 дает по крайней мере один пример для каждого подхода к группировке непосредственно в разделе спецификации https://www.w3.org/TR/xslt20/; ниже вы найдете ссылки на скрипты XSLT, основанные на этих примерах: