Я не уверен, что полностью понимаю ваш вопрос, но я предполагаю, что вы хотите скопировать ввод и изменить некоторые элементы. Это проще всего сделать с помощью XSLT.
Чтобы сделать это в XQuery, вам нужна рекурсивная функция, которая просматривает каждый узел, модифицирует его при необходимости и копирует выходные данные. Из вашего описания я предполагаю, что ваши входные данные состоят только из узлов элементов, и поэтому это единственный случай, который я рассмотрел:
declare function local:apply($node as element())
{
typeswitch ($node)
case element(a) return <a>1</a>
case element(b) return <b>2</b>
case element(c) return <c>3</c>
default return element {name($node)} {local:apply($node/*)}
}