XML/XQuery/function
Define your own function
<source lang="xml">
Simple function File: Query.xquery declare namespace math = "http://wbex.ru"; declare function math:add($op1 as xs:integer, $op2 as xs:integer) as xs:integer {
$op1 + $op2
}; declare variable $op1 as xs:integer := 1; declare variable $op2 as xs:integer := 2; <add>
<op1>{$op1}</op1> <op2>{$op2}</op2> <result>{math:add($op1, $op2)}</result>
</add>
Output:
<?xml version="1.0" encoding="UTF-8"?> <add>
<op1>1</op1> <op2>2</op2> <result>3</result>
</add>
</source>
Recursive function
<source lang="xml">
File: Query.xquery
declare namespace math = "http://wbex.ru"; declare variable $n as xs:integer external; declare function math:factorial($integer as xs:integer) as xs:double {
if ($integer gt 1) then $integer * math:factorial($integer - 1) else 1
}; concat(2, "! = ", math:factorial(2))
Output: <?xml version="1.0" encoding="UTF-8"?>2! = 2
</source>
Useful-function: between-inclusive
<source lang="xml">
File: Data.xml
<order>
<car model="A"> <id>1</id> <name language="en">name 1</name> <colorChoices>navy black</colorChoices> </car> <car model="B"> <id>2</id> <name language="en">name 2</name> </car> <car model="B"> <id>8</id> <name language="en">name 3</name> </car>
</order> File: Query.xquery declare namespace functx = "http://www.wbex.ru"; declare function functx:between-inclusive
($value as xs:anyAtomicType, $minValue as xs:anyAtomicType,$maxValue as xs:anyAtomicType) as xs:boolean { $value >= $minValue and $value <= $maxValue };
(: Example call :) let $prod := doc("Data.xml")//car[1] return functx:between-inclusive ($prod/id, 1, 5)
</source>