我有以下代码:
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,
...