BaseX中的XQuery - 让语句在文件外:write()

时间:2016-01-20 16:30:16

标签: xquery basex

我有以下代码:

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

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

2 个答案:

答案 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,
...