将运算符赋给xquery中的变量

时间:2012-10-23 16:16:22

标签: xquery

有没有办法为Xquery中的变量赋一个数值运算符?

我必须根据节点标记对给定的值对执行算术表达式。

我设法做到这一点,但它导致了很多重复的代码。我想简化查询,而不是:

添加

的功能

如果代码重复 - 这会调用其他函数但仍然重复

$ value1 + $ value2

减号功能

如果代码重复

$ value1 - $ value2

等用于乘法,div等

我想设置一个函数并向其发送一个变量,类似于:

$ value1 $ operator $ value2

在xquery中有一种简单的方法吗?

谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

如果您的查询处理器支持XQuery 3.0,则可以使用function items

declare function local:foo($operator, $x, $y) {
  let $result := $operator($x, $y)
  return 2 * $result
};
然后可以像这样调用

local:foo(...)

let $plus := function($a, $b) { $a + $b },
    $mult := function($a, $b) { $a * $b }
return (
  local:foo($plus, 1, 2),
  local:foo($mult, 3, 4)
)

答案 1 :(得分:0)

为什么不使用简单的if-else结构? E.g。

if (repeated code says you should add) then
  $value1 + $value2
else
  $value1 - $value2

你也可以简单地将重复代码放在另一个函数中,而不是复制代码。