【问题标题】:XQIB XQuery - error when trying to 'let' a variableXQIB XQuery - 尝试“让”变量时出错
【发布时间】:2012-06-09 19:53:13
【问题描述】:

我的 XQuery 知识非常缺乏,但我正在尝试使用 XQIB(浏览器中的 XQuery),但即使只是设置变量错误

let $foo := "bar"

...产生错误

MXQuery output the following error during compilation:
Line 1, Column 18: err:XPST0003 Error while parsing FFLWOR Expr: 'return' expected!
let $foo := "bar"    ERROR                        
Unknown.anonymous(Unknown Source)

我查看了 XQIB 网站上的示例,似乎 let 语句总是在子例程中,例如警报或功能。这是否表明在 XQuery 中,代码必须始终存在于某种函数中,而不是独立存在的?

例如,他们的一个例子是这样的,这当然有效:

b:alert(
    let $x := <a><b>2</b><c>4</c></a>
    return xs:string($x/b * $x/c)
)

但是这个,我的修改版本,没有。

let $x := <a><b>2</b><c>4</c></a>
b:alert(
    return xs:string($x/b * $x/c)
)

后者是怎么回事?提前感谢您的帮助。

【问题讨论】:

    标签: xquery


    【解决方案1】:

    你的回报在错误的位置:

    let $x := <a><b>2</b><c>4</c></a>
    return
        b:alert(
            xs:string($x/b * $x/c)
        )
    

    如果您使用了某些(a 的一部分)flwor 表达式,则只需要 returnlet 开始一个,所以你需要return 在它之后。由于您没有参数,因此您不需要(也不允许)在此处放置 return

    【讨论】:

    • 非常感谢。而您所描述的 - 大概是 FLWOR 的规则,而不是专门针对 XQIB 或 XQuery 的规则,对吧?所以我知道该怎么做进一步阅读。
    • 另外,如果我想声明一个变量然后执行几个引用它的操作,而不是一个返回语句怎么办?例如在this XMLPlayground session 中,我为XML 中的每个字符输出一个&lt;li&gt;。如果我想在每次迭代中添加两个 &lt;li&gt;s 怎么办?我尝试用逗号分隔 insert node 语句(正如我在一些 XQIB 示例中看到的那样),但出现了错误。再次感谢。
    • 您始终可以通过将更新语句作为序列发送来“返回”/运行一系列更新语句。试试例如。 return (insert node &lt;li&gt;{$i/name}&lt;/li&gt; into b:dom()//ul, insert node &lt;li&gt;{$i/name}&lt;/li&gt; into b:dom()//ul);。我想我覆盖了你的 Playground 会话,看看那里的运行代码,格式更易读。顺便说一句,很酷的网站。 :)
    • 啊哈,我就知道会是这样。非常感谢。 (附注:感谢回复:网站 - 刚刚启动它。非常处于测试阶段 - 欢迎提出任何建议。)
    • 我已经让它工作了 (see session) 但如果有任何想法,我将不胜感激:我是如何做到的。如果您有时间看一下,我将不胜感激,不过如果忙也没问题。随意覆盖会话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 2014-09-23
    相关资源
    最近更新 更多