Position 如何在XQuery中为序列中的位置赋值?
我有一个长度为$n的序列初始化为零: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
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处理器有允许更新变量的扩展,但通常不推荐使用。感谢您的帮助!我只需要在这件事上跳出框框思考。谢谢你的帮助!我只需要在这个问题上跳出框框思考。