У меня есть набор XML-файлов, подобных этому:
Пример входного файла:
<a-list>
<a-item key_field="unique1" other="foo"/>
<a-item key_field="unique2" other="foo"/>
...
</a-list>
и у меня есть преобразование, которое объединит эти файлы в один файл той же структуры. Он генерирует тот же элемент внешнего уровня (<a-list>
), содержащий все элементы <a-item>
из файлов, и отбрасывает дублирующиеся объекты (объекты, имеющие одно и то же поле ключа). Теперь я столкнулся с несколькими другими наборами файлов, каждый из которых очень похож по своей структуре верхнего уровня, и мне нужно выполнить почти такой же тип слияния.
Например, эти файлы могут выглядеть так:
<b-list>
<b-item different_key_field="unique93" other="foo"/>
<b-item different_key_field="unique94" other="foo"/>
...
</b-list>
В этих других файлах содержатся разные данные, но преобразование в целом одинаково: мне нужно взять несколько входных файлов, имеющих одинаковую структуру (корневой уровень, содержащий список элементов, где элементы однозначно идентифицируются атрибут ключа) и создайте выходной файл, содержащий элемент верхнего уровня, содержащий все (уникальные) элементы из каждого из входных файлов.
К сожалению, мое преобразование "слияния" работает специально с именованными элементами во входных файлах (например, оно имеет шаблоны для <a-item>
узлов и специально ищет дублированные атрибуты key_field
). Копировать преобразование, искать / заменять имена элементов и имя ключевого атрибута довольно тривиально, но кажется крайне неэффективным дублировать один и тот же код один раз для каждого типа входного файла. Единственные отличия - это имя корневого элемента, имя элемента item и имя ключевого атрибута. То, что я хочу сделать (объединить), остается прежним.
Как я могу написать преобразование, которое может выполнять этот тип операции слияния без указания точных имен элементов / атрибута, чтобы я мог вызывать одно и то же преобразование для каждого типа файла? Есть ли способ принять имя корневого элемента, имя элемента элемента и имя ключевого атрибута в качестве параметров?
В качестве дополнительных ограничений я ограничен использованием Xalan, поэтому я считаю, что это означает только XSL 1.0, и было бы лучше избегать любых расширений.
Я думал о преобразовании XSL с другим XSL, но это кажется довольно запутанным для такой простой вещи.
Я пробовал искать здесь и по всему интернету через Google, но я немного новичок в XSL, и все слова, которые я могу найти, чтобы искать в связи с XSL или XSLT, имеют определенное значение в контексте XSL. которые делают их менее полезными в качестве поисковых терминов (например, шаблон XSL, универсальный XSL и т. д.). Было бы здорово, если бы у вас был хороший словарь и несколько хороших ссылок, пример был бы потрясающим.
Большое спасибо,
Russ