Ans*_*ari 2 xpath xquery marklogic
一旦在 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>
Run Code Online (Sandbox Code Playgroud)
谢谢..
为此不需要 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>
Run Code Online (Sandbox Code Playgroud)
为了遵循迈克尔的出色建议,并优化以返回完整的项目,我会翻转 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
Run Code Online (Sandbox Code Playgroud)
或者更短:
let $prices := fn:doc('/training/prices.xml')/prices
let $order := fn:doc('/training/order.xml')/order
return
$order/item[@num = $prices/priceList/prod/@num]
Run Code Online (Sandbox Code Playgroud)
哼!
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |