Xml XQuery返回不';我什么都不算
因此,我们需要用XQuery做一个练习。用于存储在XML中的操作的计算器。这是我第一次使用XQuery,我很困惑。无论我在return语句中输入什么,Saxon都不会返回包含在return段中的函数的结果,而是以纯文本形式返回,因此调用:Xml XQuery返回不';我什么都不算,xml,xquery,saxon,Xml,Xquery,Saxon,因此,我们需要用XQuery做一个练习。用于存储在XML中的操作的计算器。这是我第一次使用XQuery,我很困惑。无论我在return语句中输入什么,Saxon都不会返回包含在return段中的函数的结果,而是以纯文本形式返回,因此调用: declare function m:evaluate($tree as element()) as element(fraction) { if(local-name($tree)="fraction") then ( for $a in $tree
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>
}
)
表达式被视为文本,因为它们不在大括号(
{}
)内。大括号已经是语法的一部分,但在使用区分纯文本和表达式时需要添加大括号:
<numerator>{ m:evaluate($tree/*[1]/numerator) * m:evaluate($tree/*[2]/numerator)}</numerator>
{m:evaluate($tree/*[1]/分子)*m:evaluate($tree/*[2]/分子)}
谢谢。成功了。我现在还有很多其他问题。是否有一种调试xquery的好方法(例如,当我得到“不允许在…中使用空参数”并且我想知道会发生什么情况时)?@MariusRom OxygenXML是一个很好的文本编辑器,可以突出显示代码中的错误。但是,读取Saxon调试器返回的错误和行号并查看代码可能会更快:)
<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 >
<numerator>{ m:evaluate($tree/*[1]/numerator) * m:evaluate($tree/*[2]/numerator)}</numerator>