Hello, This is input XML: <employee emp="1" dept="55"> <name>Peter</name> <job>Director</job> <employee emp="12" dept="26"> <name>John</name> <job>Animator</job> <employee emp="123" dept="27"> <name>James</name> <job>Assistant</job> </employee> </employee> </employee> Desired output XML: <employee emp="1" dept="55"> <name>Peter</name> <job>Director</job> </employee> Overall, it is a so called 'modified identity transformation' in XSLT parlance. Output XML shall be the same, except the child <employee> element and its children. Question: What is the best way to re-create existing root element with all its attributes? My implementation: xquery version "3.1"; declare context item := document { <employee emp="1" dept="55"> <name>Peter</name> <job>Director</job> <employee emp="12" dept="26"> <name>John</name> <job>Animator</job> <employee emp="123" dept="27"> <name>James</name> <job>Assistant</job> </employee> </employee> </employee> }; (: working version :) element {fn:node-name(/*)} { let $y := ./*/@* return $y, (: copy all attributes :) for $x in ./*/(* except employee) return $x } (: NOT working version, trying to make it more concise :) element {fn:node-name(/*)} {/*/@*} { return for $x in ./*/(* except employee) return $x } Regards, Yitzhak Khabinsky