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