I have the following code:
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 is giving me an error - "Incomplete FLWOR expression: expecting 'return'."
It is specifically highlighting the file:write line, underlining file in red.
I'm not sure why this is happening. How do I structure this to avoid syntax errors?
You can't have a let without a return. In your case you would simply add the return before file:write:
let $fName := "C:\Users\user\Documents\Sitemaps\Updated Pages\Books.xml"
return file:write($fName,
...
It's easier to reason about XQuery if you consider that everything is an expression. What you would normally be able to execute as a statement in a procedural language, possibly with no dependencies to other statements, in XQuery must be part of a valid expression - generally, FLWOR or XPath.
If you want to declare constants at the top of the file, you can use declare variable instead of let (which, as @wst said, must be part of a FLWOR expression):
declare variable $fName := "C:\Users\user\Documents\Sitemaps\Updated Pages\Books.xml";
file:write($fName,
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With