Difference between revisions of "XQuery Recipes"
Jump to navigation
Jump to search
Line 76: | Line 76: | ||
</pre> | </pre> | ||
+ | == Count number of files == | ||
+ | |||
+ | This snippets returns the number of JPG files in a directory and its sub-directories: | ||
+ | |||
+ | <pre class="brush:xquery"> | ||
+ | basex "count(file:list('.',true(),'*.jpg'))"</pre> | ||
+ | |||
+ | The Linux equivalent is | ||
+ | |||
+ | <pre class="brush:xml"> | ||
+ | find . | grep \.jpg$ | wc -l | ||
+ | </pre> | ||
[[Category:XQuery]] | [[Category:XQuery]] |
Revision as of 19:34, 30 July 2012
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"> <foo>Bar!</foo> </element>
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 { $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')
results in
<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>
IP-Converter
This snippet converts an IP address to its numeric representation:
let $ip := '134.34.226.65' return fold-left( function($n, $d) { 256 * $n + $d }, 0, map(xs:integer#1, tokenize($ip, '\.')) )
results in
2250433089
Count number of files
This snippets returns the number of JPG files in a directory and its sub-directories:
basex "count(file:list('.',true(),'*.jpg'))"
The Linux equivalent is
find . | grep \.jpg$ | wc -l