【问题标题】:XQuery with basex-node Database gives other results with an external variable?带有 basex-node 数据库的 XQuery 通过外部变量给出其他结果?
【发布时间】:2015-08-10 15:21:35
【问题描述】:

我目前正在尝试正确使用 BaseX 数据库和 NodeJS 包“basex-node”。

通过编写连接到我在本地计算机上运行的 BaseX-Database-Server 的 .js 脚本,我已经能够创建一个新数据库、添加和删除单个文件并处理一些 xquery 查询.

我的问题如下:当我使用

var input = for $doc in collection(\'test_db\') where matches(document-uri($doc), \'test_db/a1.xml') return $doc;
var query = client.query(input);

query.execute(log.print);

要将我的查询插入到变量中,将其绑定到 basex-node 查询并执行它,我将得到我的文档内容作为正确的响应,正如我所期望的那样。

现在我要做的是不要将“a1.xml”作为我要查找的固定文档,而是提供一个外部变量。所以我将代码更改为以下内容:

var input = "declare variable $foo external; for $doc in collection(\'test_db\') where matches(document-uri($doc), \'test_db/$foo') return $foo";
var query = client.query(input);

query.bind("foo", "a1.xml", "", log.print);
query.execute(log.print);

所以基本上我使用$foo 作为外部变量并将“a1.xml”绑定到它(我想用它来稍后查找动态文档或特定节点,只要我知道如何使用和使用我的 .js 脚本调用参数)。

但是这样做时我收到的结果只是“结果:''”而不是文档。

我已经尝试将输入更改为:

var input = "declare variable $foo external; return $foo"; 

我收到“结果:'a1.xml'”,所以我猜我以正确的方式绑定了变量。

但它似乎不是这样工作的,所以我认为我在理解所有这些如何工作时犯了一个巨大的错误,或者在代码中犯了一个愚蠢的小错误。或者两者兼而有之。

【问题讨论】:

  • 小提示:在 XQuery 中,可以同时使用单引号 ' 和双引号 " 来转义字符串,它们是相等的。在其他地方构建查询时,避免转义引号。

标签: javascript xml node.js variables basex


【解决方案1】:

变量不会在字符串中解析。而不是'test_db/$foo' 使用'test_db/'|| $foo,这是concat('test_db/', $foo) 的简写。

例如,这将返回foo$bar

let $bar := 'bar'
return 'foo$bar'

同时

let $bar := 'bar'
return 'foo' || $bar

将返回预期的foobar

【讨论】:

    猜你喜欢
    • 2016-03-15
    • 1970-01-01
    • 2021-01-19
    • 2015-06-17
    • 2012-11-05
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 2018-03-13
    相关资源
    最近更新 更多