首页 > 解决方案 > 引发错误:XDMP-UNEXPECTED: (err:XPST0003) 意外的令牌语法错误,意外的 For_,期望 Order_ 或 Return_ 或 Stable_

问题描述

一旦在 qconsole Marklogic 中运行以下代码,我就会遇到错误

XDMP-UNEXPECTED: (err:XPST0003) 意外的令牌语法错误,意外的 For_,期望 Order_ 或 Return_ 或 Stable_

let $prices := fn:doc('/training/prices.xml')/prices
let $order := fn:doc('/training/order.xml')/order
where $prices/priceList/prod[@num=$order/item/@num]
for $kk in $prices/priceList/prod[@num=$order/item/@num]
return 
<item>
{$kk}
</item>

谢谢..

标签: xpathxquerymarklogic

解决方案


不需要 XQuery 3。return只需在 thewhere和 next之间添加一个额外的for

let $prices := fn:doc('/training/prices.xml')/prices
let $order := fn:doc('/training/order.xml')/order
where $prices/priceList/prod[@num=$order/item/@num]
return
for $kk in $prices/priceList/prod[@num=$order/item/@num]
return 
<item>
{$kk}
</item>

为了遵循 Michael 的出色建议,并优化以返回完整项目,我将翻转 XPath,并直接返回订单项目。就像是:

let $prices := fn:doc('/training/prices.xml')/prices
let $order := fn:doc('/training/order.xml')/order
for $item in $order/item
where $prices/priceList/prod[@num = $item/@num]
return
    $item

甚至更短:

let $prices := fn:doc('/training/prices.xml')/prices
let $order := fn:doc('/training/order.xml')/order
return
    $order/item[@num = $prices/priceList/prod/@num]


推荐阅读