declare function local:split($x as node()) as node() { let $name := $x/name/text() return let $sons := for $p in $x/children/person[@gender="M"] return local:split($p) return let $daughters := for $p in $x/children/person[@gender="F"] return local:split($p) return if ($x/@gender = "M") then {$sons} {$daughters} else {$sons} {$daughters} } ; {for $p in ./doc/person return local:split($p)}