Я создал решение этой проблемы, используя эквивалент почтового слияния, используя набор результатов в качестве источника, и шаблон, с помощью которого он был объединен для создания желаемого XML.
Шаблон представлял собой стандартный XML с элементом Header, элементом Footer и элементом Body. Использование блока CDATA в элементе Body позволило мне включить полную структуру XML, которая служила шаблоном для каждой строки. Чтобы включить поля из набора результатов в шаблон, я использовал маркеры, которые выглядели так: <[FieldName]>
. Затем шаблон был предварительно проанализирован, чтобы изолировать маркеры так, чтобы во время работы шаблон запрашивал каждое из полей из набора результатов при создании тела.
Элементы верхнего и нижнего колонтитула выводятся только один раз в начале и в конце набора вывода. Тело может быть любой желаемой XML или текстовой структурой. В вашем случае кажется, что у вас может быть несколько шаблонов, по одному для каждой из ваших желаемых схем.
Все вышеперечисленное было инкапсулировано в класс Template, так что после загрузки шаблона я просто вызвал merge()
в шаблоне, передавая набор результатов в качестве параметра.