我想知道在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())
- 但没有任何对我有用。
答案 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>