File: map-006.xq

package info (click to toggle)
qtxmlpatterns-opensource-src 5.15.15-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 308,860 kB
  • sloc: xml: 360,343; cpp: 91,994; ansic: 388; sh: 53; sed: 31; makefile: 23
file content (27 lines) | stat: -rw-r--r-- 763 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
xquery version "1.1";
(: Higher Order Functions :)
(: map function :)
(: Author - Michael Kay, Saxonica :)

declare function local:children($n as node()) as node() {
  $n/child::node()
};

declare function local:attributes($e as node()) as node() {
  $e/attribute::node()
};

declare function local:self($e as node()) as node() {
  $e
};

declare function local:union($f as function(node()) as node()*,  $g as function(node()) as node()*)
  as function(node()) as node()* {
  function($a) {$f($a) | $g($a)}
};

let $data := <a aid="a"><b bid="b"><b1/></b><c cid ="c"><c1/></c></a>
let $f := local:union(local:children#1, local:union(local:attributes#1, local:self#1))
return

<out>{map($f, $data/*)[not(. instance of attribute())]}</out>