После изменения вашего ввода XML, чтобы сделать его действительным XML файлом с элементом root и такими закрывающими тегами
<root>
<topic>
<data attribute1="1">some data 1</data>
<data attribute1="1">some data x</data>
<data2 type="sometype">some data 2</data2>
</topic>
<topic>
<data attribute1="1">some data 1</data>
<data attribute2="2">some data 2</data>
</topic>
</root>
, вы можете объединить все подузлы <topic>
элементы в одном <topic>
элементе с этим XQuery:
let $file := doc("a.xml")/root
return
<topic>{for $item in $file/topic/* return $item}</topic>
Его вывод
<topic>
<data attribute1="1">some data 1</data>
<data attribute1="1">some data x</data>
<data2 type="sometype">some data 2</data2>
<data attribute1="1">some data 1</data>
<data attribute2="2">some data 2</data>
</topic>
, что отличается от ожидаемого результата. Но поскольку вы не указали никаких правил для вывода, это так же хорошо, как и получается.