XQuery Recipes

From BaseX Documentation
Revision as of 22:32, 24 January 2011 by Michael (talk | contribs) (Added Leo's function (Thanks to Leo & Huib) from https://mailman.uni-konstanz.de/pipermail/basex-talk/2011-January/001034.html)
Jump to navigation Jump to search

This page contains code snippets that mainly originate from our basex-talk mailing list.

Computed Elements

Returns dynamically named elements:

let $root := "element"
let $value := "hi"
let $contents := <foo>Bar!</foo>
return element { $root } {
  attribute { "about" } { $value }, $contents

The result is an XML fragment with <element> as root node:

<element about="hi">

Transform List to Tree

This snippet transform a flat list of elements with parentId-references to a nested list.

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 {
   for $child in $children
   return local:link($entries, $child/@id)

let $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" />
return local:link($entries/entry, 'entry1')

results in

<entry id="entry1">
  <entry id="entry2" parentId="entry1">
    <entry id="entry4" parentId="entry2"/>
    <entry id="entry5" parentId="entry2"/>
  <entry id="entry3" parentId="entry1">
    <entry id="entry6" parentId="entry3"/>
    <entry id="entry7" parentId="entry3"/>