Changes

Jump to navigation Jump to search
1,151 bytes added ,  23:32, 24 January 2011
Added Leo's function (Thanks to Leo & Huib) from https://mailman.uni-konstanz.de/pipermail/basex-talk/2011-January/001034.html
</pre>
== Transform List to Tree ==
This snippet transform a ''flat'' list of elements with <code>parentId</code>-references to a nested list.
 
<pre class="brush:xquery">
declare function local:link($entries as node()*, $id as xs:string) {
let $entry := $entries[@id eq $id],
$children := $entries[@parentId eq $id]
return element entry {
$entry/@*,
for $child in $children
return local:link($entries, $child/@id)
}
};
 
let $entries :=
<entries>
<entry id="entry1" />
<entry id="entry2" parentId="entry1" />
<entry id="entry3" parentId="entry1" />
<entry id="entry4" parentId="entry2" />
<entry id="entry5" parentId="entry2" />
<entry id="entry6" parentId="entry3" />
<entry id="entry7" parentId="entry3" />
</entries>
return local:link($entries/entry, 'entry1')
</pre>
results in
<pre class="brush:xml">
<entry id="entry1">
<entry id="entry2" parentId="entry1">
<entry id="entry4" parentId="entry2"/>
<entry id="entry5" parentId="entry2"/>
</entry>
<entry id="entry3" parentId="entry1">
<entry id="entry6" parentId="entry3"/>
<entry id="entry7" parentId="entry3"/>
</entry>
</entry>
</pre>
[[Category:XQuery]]
administrator, Bureaucrats, editor, Interface administrators, reviewer, Administrators
401

edits

Navigation menu