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



我有以下代码:

let $fName := "C:UsersuserDocumentsSitemapsUpdated PagesBooks.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 给了我一个错误 - "不完整的 FLWOR 表达式:期望'返回'"。它特别突出显示file:write线,用红色下划线file

我不确定为什么会发生这种情况。如何构建它以避免语法错误?

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

let $fName := "C:UsersuserDocumentsSitemapsUpdated PagesBooks.xml"
return file:write($fName,
...
如果你

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

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

declare variable $fName := "C:UsersuserDocumentsSitemapsUpdated PagesBooks.xml";
file:write($fName,
...

最新更新