我有以下代码:
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给我一个错误 - "不完整的FLWOR表达:期待'返回'。"
它专门突出显示file:write
行,用红色下划线file
。
我不确定为什么会这样。如何构造它以避免语法错误?
答案 0 :(得分:3)
如果没有let
,您就无法拥有return
。在您的情况下,您只需在return
之前添加file:write
:
let $fName := "C:\Users\user\Documents\Sitemaps\Updated Pages\Books.xml"
return file:write($fName,
...
如果您认为一切都是表达式,那么理解XQuery会更容易。在XQuery中,通常能够以过程语言执行的语句(可能与其他语句没有依赖关系)必须是有效表达式的一部分 - 通常是FLWOR或XPath。
答案 1 :(得分:2)
如果要在文件顶部声明常量,可以使用declare variable
代替let
(正如@wst所说,必须是 FLWOR的一部分表达式):
declare variable $fName := "C:\Users\user\Documents\Sitemaps\Updated Pages\Books.xml";
file:write($fName,
...