在 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>
我想知道在 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>