BaseX 中的 XQuery - 在 file:write() 之外的 let 语句

XQuery in BaseX - let statement outside of file:write()

我有以下代码:

let $fName := "C:\Users\user\Documents\Sitemaps\Updated Pages\Books.xml"

file:write($fName,
  element titles{
    for $x in doc("http://www.w3schools.com/xsl/books.xml")/bookstore/book
    where $x/price>0
    order by $x/title
    return $x/title
})

BaseX 给我一个错误 - "Incomplete FLWOR expression: expecting 'return'." 它特别突出了 file:write 行,用红色下划线 file

我不确定为什么会这样。我该如何构造它以避免语法错误?

没有 return 就不可能有 let。在您的情况下,您只需在 file:write:

之前添加 return
let $fName := "C:\Users\user\Documents\Sitemaps\Updated Pages\Books.xml"
return file:write($fName,
...

如果您认为一切都是表达式,那么对 XQuery 的推理就更容易了。在 XQuery 中,您通常能够作为过程语言中的语句执行的内容(可能不依赖于其他语句)必须是有效表达式的一部分 - 通常是 FLWOR 或 XPath。

如果你想在文件的顶部声明常量,你可以使用 declare variable 而不是 let (正如@wst 所说,它必须是 [=15= 的一部分]FLWOR 表达式):

declare variable $fName := "C:\Users\user\Documents\Sitemaps\Updated Pages\Books.xml";
file:write($fName,
...