在XQuery中从内部访问变量

时间:2015-07-07 09:46:18

标签: 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()) - 但没有任何对我有用。

2 个答案:

答案 0 :(得分:3)

这是不可能的,既不能使用变量名(它尚未定义),也不能使用preceding-sibling轴(没有上下文项绑定)。

在flwor-expression中构造变量的内容:

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也可能是另一种选择(但就可读性和性能而言,似乎对我来说似乎不是最合理的。)

答案 1 :(得分:3)

你做不到。该变量不会被创建,直到其中的所有内容都被构造出来。

但是你可以在变量

中有临时变量

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>