XQuery return 不计算任何东西
XQuery return doesn't calculate anything
所以,我们需要用 XQuery 做这个练习。存储在 XML 中的计算器。这是我第一次使用 XQuery,我很困惑。无论我在 return 语句中输入什么,Saxon return 都不是 return 段中包含的函数的结果,而只是 return 纯文本形式的结果,因此调用:
declare function m:evaluate($tree as element()) as element(fraction) {
if(local-name($tree)="fraction") then (
for $a in $tree
return
<fraction>
<numerator>$tree/numerator</numerator>
<denominator>$tree/denominator </denominator>
</fraction>
)
else(
typeswitch($tree)
case $tree as element(sum)
return element fraction{
<numerator>$tree/*[1]/numerator/$tree/*[1]/denominator*$ggT+$tree/*[2]/numerator/$tree/*[2]/denominator*$ggT)</numerator>,
<denominator>m:findggT($tree/*[1]/denominator,$tree/*[2]/denominator)</denominator>}
case $tree as element(product)
return element fraction{
<numerator>m:evaluate($tree/*[1]/numerator)*m:evaluate($tree/*[2]/numerator)</numerator>,
<denominator>m:evaluate($tree/*[1]/denominator)*m:evaluate($tree/*[2]/denominator)</denominator>
}
default return element fraction {
<numerator>$tree/numerator</numerator>,
<denominator>$tree/denominator </denominator>
}
)
returns
<fraction>
<numerator>m:evaluate($tree/*[1]/numerator)*m:evaluate($tree/*[2]/numerator)</numerator>
<denominator>m:evaluate($tree/*[1]/denominator)*m:evaluate($tree/*[2]/denominator)</denominator>
</fraction>%
显然,被调用的xml的根元素是一个product
.
我似乎错过了 XQuery 中函数调用的工作原理,但我不知道是什么。
我用的XML是:
<product>
<sum>
<fraction >
<numerator >1</numerator >
<denominator >2</denominator >
</fraction >
<fraction >
<numerator >1</numerator >
<denominator >3</denominator >
</fraction >
<fraction >
<numerator >1</numerator >
<denominator >4</denominator >
</fraction >
</sum>
<fraction >
<numerator >2</numerator >
<denominator >3</denominator >
</fraction >
</product >
您的表达式被视为文本,因为它们不在大括号内 ({}
)。大括号已经是 computed element constructor syntax, but they need to be added when using a direct element constuctor 的一部分,以区分纯文本和表达式:
<numerator>{ m:evaluate($tree/*[1]/numerator) * m:evaluate($tree/*[2]/numerator)}</numerator>
所以,我们需要用 XQuery 做这个练习。存储在 XML 中的计算器。这是我第一次使用 XQuery,我很困惑。无论我在 return 语句中输入什么,Saxon return 都不是 return 段中包含的函数的结果,而只是 return 纯文本形式的结果,因此调用:
declare function m:evaluate($tree as element()) as element(fraction) {
if(local-name($tree)="fraction") then (
for $a in $tree
return
<fraction>
<numerator>$tree/numerator</numerator>
<denominator>$tree/denominator </denominator>
</fraction>
)
else(
typeswitch($tree)
case $tree as element(sum)
return element fraction{
<numerator>$tree/*[1]/numerator/$tree/*[1]/denominator*$ggT+$tree/*[2]/numerator/$tree/*[2]/denominator*$ggT)</numerator>,
<denominator>m:findggT($tree/*[1]/denominator,$tree/*[2]/denominator)</denominator>}
case $tree as element(product)
return element fraction{
<numerator>m:evaluate($tree/*[1]/numerator)*m:evaluate($tree/*[2]/numerator)</numerator>,
<denominator>m:evaluate($tree/*[1]/denominator)*m:evaluate($tree/*[2]/denominator)</denominator>
}
default return element fraction {
<numerator>$tree/numerator</numerator>,
<denominator>$tree/denominator </denominator>
}
)
returns
<fraction>
<numerator>m:evaluate($tree/*[1]/numerator)*m:evaluate($tree/*[2]/numerator)</numerator>
<denominator>m:evaluate($tree/*[1]/denominator)*m:evaluate($tree/*[2]/denominator)</denominator>
</fraction>%
显然,被调用的xml的根元素是一个product
.
我似乎错过了 XQuery 中函数调用的工作原理,但我不知道是什么。
我用的XML是:
<product>
<sum>
<fraction >
<numerator >1</numerator >
<denominator >2</denominator >
</fraction >
<fraction >
<numerator >1</numerator >
<denominator >3</denominator >
</fraction >
<fraction >
<numerator >1</numerator >
<denominator >4</denominator >
</fraction >
</sum>
<fraction >
<numerator >2</numerator >
<denominator >3</denominator >
</fraction >
</product >
您的表达式被视为文本,因为它们不在大括号内 ({}
)。大括号已经是 computed element constructor syntax, but they need to be added when using a direct element constuctor 的一部分,以区分纯文本和表达式:
<numerator>{ m:evaluate($tree/*[1]/numerator) * m:evaluate($tree/*[2]/numerator)}</numerator>