[xquery-talk] Building a tree from sequence of maps
Andreas Mixich
mixich.andreas at gmail.com
Mon Dec 30 22:46:37 PST 2019
Staying away from an issue for a few days can be quite clearing! When I
revisited the task, I saw it right on! Or so I think...
This is the solution I came up with:
declare variable $local:xml :=
<xml>
<item id="e1" />
<item id="e2" refid="e1" />
<item id="e3" refid="e2" />
<item id="e4" refid="e2" />
<item id="e5" refid="e4" />
<item id="e6" />
<item id="e7" />
<item id="e8" refid="e7" />
<item id="e9" refid="e7" />
<item id="e10" refid="e9" />
<item id="e11" />
</xml>;
declare function local:get-parents($item) { $local:xml/item[not(@refid !=
$item/@id)] };
declare function local:get-children($item) { $local:xml/item[@refid =
$item/@id] };
declare function local:process-item($item) {
<section>
{
let $t := $item/(@*, local:get-children($item)/local:process-item(.))
return $t
}
</section>
};
let $root := local:get-parents($local:xml/item)
for $item in $root
return local:process-item($item)
which produces:
<?xml version="1.0" encoding="UTF-8"?>
<section id="e1">
<section id="e2" refid="e1">
<section id="e3" refid="e2"/>
<section id="e4" refid="e2">
<section id="e5" refid="e4"/>
</section>
</section>
</section>
<section id="e6"/>
<section id="e7">
<section id="e8" refid="e7"/>
<section id="e9" refid="e7">
<section id="e10" refid="e9"/>
</section>
</section>
<section id="e11"/>
and that seems to match the case. Thank you.
--
Minden jót, all the best, Alles Gute,
Andreas Mixich
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://x-query.com/pipermail/talk/attachments/20191231/4e01c1bf/attachment.html>
More information about the talk
mailing list