【问题标题】:XQuery in BaseX - let statement outside of file:write()BaseX 中的 XQuery - 文件之外的 let 语句:write()
【发布时间】:2016-01-20 16:30:15
【问题描述】:

我有以下代码:

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

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

【问题讨论】:

    标签: xquery basex


    【解决方案1】:

    如果没有return,您就不能拥有let。在您的情况下,您只需在file:write 之前添加return

    let $fName := "C:\Users\user\Documents\Sitemaps\Updated Pages\Books.xml"
    return file:write($fName,
    ...
    

    如果您认为一切都是表达式,则更容易推理 XQuery。在 XQuery 中,您通常能够在过程语言中作为语句执行(可能不依赖于其他语句)必须是有效表达式的一部分 - 通常是 FLWOR 或 XPath。

    【讨论】:

      【解决方案2】:

      如果你想在文件顶部声明常量,你可以使用declare variable而不是let(正如@wst所说,它必须是FLWOR表达式的一部分) :

      declare variable $fName := "C:\Users\user\Documents\Sitemaps\Updated Pages\Books.xml";
      file:write($fName,
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多