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)}