Position 如何在XQuery中为序列中的位置赋值?

Position 如何在XQuery中为序列中的位置赋值?,position,xquery,variable-assignment,sequence,Position,Xquery,Variable Assignment,Sequence,我有一个长度为$n的序列初始化为零: let $seq := (for $i in (1 to $n) return 0) 我可以很容易地得到一个职位 return $seq[5] …但我如何更新它?(以下内容不起作用) XQuery是一种功能性语言,而不是过程性语言,因此变量是不可变的,一旦赋值就不能更新。您需要执行以下操作并创建一个新序列: let $seq2 := for $n at $pos in $seq if ($pos eq 5) then $n + 1 e

我有一个长度为$n的序列初始化为零:

let $seq := (for $i in (1 to $n) return 0)
我可以很容易地得到一个职位

return $seq[5]
…但我如何更新它?(以下内容不起作用)


XQuery是一种功能性语言,而不是过程性语言,因此变量是不可变的,一旦赋值就不能更新。您需要执行以下操作并创建一个新序列:

let $seq2 := 
  for $n at $pos in $seq
  if ($pos eq 5) 
  then $n + 1
  else $n

通常,在XQuery中,最好设计算法,这样就不需要这种可变变量的解决方法。如果你有需要更新的数据,考虑把它放在数据库中。

XQuery是一个函数,而不是一个过程语言,所以变量是<强>不变的< /强> -它们一旦被赋值就不能被更新。您需要执行以下操作并创建一个新序列:

let $seq2 := 
  for $n at $pos in $seq
  if ($pos eq 5) 
  then $n + 1
  else $n

通常,在XQuery中,最好设计算法,这样就不需要这种可变变量的解决方法。如果你有需要更新的数据,考虑把它放在数据库中。

如果你使用支持XQuery 3地图(如Sxon,BaseX)的XQuery实现,你可以使用这些:

declare namespace map="http://www.w3.org/2005/xpath-functions/map";

(: Fill map with square numbers :)
let $map := map:new(
  for $i in (1 to 10)
  return map:entry($i, $i*$i)
)
(: Overwrite a single value :)
let $map := map:new(($map, map:entry(2, 5)))
(: Fetch this value :)
return map:get($map, 2)

但通常情况下,不使用映射就可以解决问题,并且在大多数情况下,此代码可能会运行得更快,因为它会得到更好的优化。

如果您使用的是支持XQuery 3映射的XQuery实现(例如Saxon、BaseX),则可以使用这些:

declare namespace map="http://www.w3.org/2005/xpath-functions/map";

(: Fill map with square numbers :)
let $map := map:new(
  for $i in (1 to 10)
  return map:entry($i, $i*$i)
)
(: Overwrite a single value :)
let $map := map:new(($map, map:entry(2, 5)))
(: Fetch this value :)
return map:get($map, 2)
但通常情况下,不使用映射就可以解决问题,并且在大多数情况下,该代码可能会运行得更快,因为它会得到更好的优化

…但我如何更新它?(以下内容不起作用)

使用纯XPath(也就是纯XQuery:)这里可能是指定此项的最短方法:

subsequence($seq, 1, 4), $seq[5] + 1, subsequence($seq, 6)
这将生成一个新序列,其项目与
$seq
的项目相同,只是其第五个项目的值为
$seq[5]+1

正如其他人所指出的,XPath和XQuery是函数式语言,这意味着变量一旦定义,就不能修改其值

…但我如何更新它?(以下内容不起作用)

使用纯XPath(也就是纯XQuery:)这里可能是指定此项的最短方法:

subsequence($seq, 1, 4), $seq[5] + 1, subsequence($seq, 6)
这将生成一个新序列,其项目与
$seq
的项目相同,只是其第五个项目的值为
$seq[5]+1


正如其他人所指出的,XPath和XQuery是函数式语言,这意味着变量一旦定义,就不能修改其值。

请注意,有些XQuery处理器的扩展允许更新变量,但通常不推荐使用。请注意,有些XQuery处理器有允许更新变量的扩展,但通常不推荐使用。感谢您的帮助!我只需要在这件事上跳出框框思考。谢谢你的帮助!我只需要在这个问题上跳出框框思考。