2016-01-20 2 views
2

У меня есть следующий код: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

Если вы хотите, чтобы объявить константы в верхней части файла, вы можете использовать declare variable вместо let (который, как @wst сказал, должен быть частью выражения в FLWOR):

declare variable $fName := "C:\Users\user\Documents\Sitemaps\Updated Pages\Books.xml"; 
file:write($fName, 
... 
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.

Смежные вопросы