xsl:merge¶
Цель инструкции - позволить объединить два или более предварительно отсортированных входных файлов, по желанию используя потоковую обработку любого или всех входных файлов.
Доступна в XSLT 3.0. Начиная с Saxon 9.8, доступен во всех изданиях. Реализовано в Saxon-PE и Saxon-EE начиная с Saxon 9.4.
- Категория: инструкция
- Содержимое: (
xsl:merge-source
+,xsl:merge-action
,xsl:fallback
* ) - Допустимые родительские элементы: любой элемент XSLT, модель содержимого которого - sequence-constructor; любой литеральный элемент результата
- Элемент не имеет атрибутов
Заметки по реализации Saxon¶
Инструкция xsl:merge
является новой в XSLT 3.0 и впервые была реализована в Saxon-EE 9.4. В последующих рабочих проектах в спецификацию вносился ряд изменений; начиная с Saxon 9.8, реализация соответствует окончательному варианту Рекомендации XSLT 3.0.
В Saxon 9.5 реализован атрибут sort-before-merge
, который позволяет сортировать входные данные перед объединением.
В Saxon 9.6 появилась поддержка потокового слияния. Было сделано одно отступление от спецификации: узлы, выбранные для слияния с помощью xsl:merge-source/@select
, являются копиями узлов исходного документа (в смысле функции copy-of()
), а не моментальными снимками (как определено функцией snapshot()
). Это означает, что предки выбранных узлов и атрибуты предков недоступны.
Для потоковой обработки требуется Saxon-EE, но в Saxon-PE и Saxon-HE эта инструкция реализована без потоковой обработки.
Подробности¶
Каждый вид источника ввода описывается в дочернем элементе xsl:merge-source
инструкции xsl:merge
; если существует несколько экземпляров данного вида источника ввода, они выбираются в атрибуте for-each-item
или for-each-source
элемента xsl:merge-source
элемента, в то время как атрибут select
выбирает фактические узлы, формирующие входную последовательность. Обработка, которая должна быть выполнена для каждой группы входных элементов, имеющих общее значение для ключа слияния, определяется в элементе xsl:merge-action
.
Примеры¶
Пример 1¶
Объединяет однородную коллекцию файлов журналов, каждый из которых уже отсортирован по временной метке:
1 2 3 4 5 6 7 8 |
|
Пример 2¶
Объединяет два файла журнала с различной внутренней структурой:
1 2 3 4 5 6 7 8 9 10 11 |
|