在 XQuery 中从自身内部访问变量

Access variable from within itself in XQuery

我想知道在 XQuery 中是否可以从变量本身访问变量中的某些元素。

例如,如果您有一个包含多个数字的变量,并且您想要在变量本身内将它们全部相加。你能只用一个变量吗?考虑这样的事情:

 let $my_variable := 
      <my_variable_root>
        <number>5</number>
        <number>10</number>
        <sum>{sum (??)}</sum>
      </my_variable_root>
return $my_variable

你能否在 sum() 中放置一些 XPath 表达式来访问前面 number 元素的值?我已经尝试了 $my_variable//number/number(text())//number/number(text())preceding-sibling::number/number(text()) - 但对我来说没有任何效果。

这是不可能的,无论是使用变量名(尚未定义),还是使用 preceding-sibling 轴(未绑定上下文项)。

改为在 flwor 表达式中构造变量的内容:

let $my_variable := 
     let $numbers := (
       <number>5</number>,
       <number>10</number>
     )
     return
      <my_variable_root>
        { $numbers }
        <sum>{ sum( $numbers) }</sum>
      </my_variable_root>
return $my_variable

如果你有多次相似的模式,考虑写一个函数;使用 XQuery Update 也可能是一种替代方法(但对我来说似乎不是最合理的方法,无论是在可读性方面还是在性能方面)。

你不能那样做。变量不会被创建,直到其中的所有内容都被构建。

但是变量中可以有临时变量

喜欢

let $my_variable := 
  <my_variable_root>{
    let $numbers := (
      <number>5</number>,
      <number>10</number>
    )
    return ($numbers, <sum>{sum ($numbers)}</sum>)
  } </my_variable_root>

或 (XQuery 3):

let $my_variable := 
  <my_variable_root>{
    let $numbers := (5,10) 
    return (
      $numbers ! <number>{.}</number>, 
      <sum>{sum ($numbers)}</sum>)
  } </my_variable_root>