在XQuery表达式中使用外部变量



我正在使用一个Node.js应用程序的BaseX数据库服务器。该应用程序允许用户在用分隔符分隔的文本域中输入多个字符串。然后将这些多个字符串查询到XML文件,以搜索具有相同值的节点。我不知道如何在XQuery中包含外部变量splitstring。下面是我的代码:

exports.search = function(req, res){
var string = req.body.searchBox;
string = string.toLowerCase();
var splitstring = string.split(' ');
//console.log(splitstring);
var basex = require('basex');
var log = require("../node_modules/basex/debug");
// create session
var session = new basex.Session();
basex.debug_mode = false;
// create query instance
var inputquery = 'for $node in doc("./tags.xml")/images/image return $node/source';
var query = session.query(inputquery);
query.results(log.print);
// close query instance
query.close();
// close session
session.close(); 

我想实现这样的东西:

var inputquery = 'for $node in doc("./tags.xml")/images/image where $node/tag=' + <one of the strings in splitstring> + ' return $node/source';

这样的事情可以做使用BaseX和XQuery吗?

这是绝对支持的。参见node.js BaseX库的测试套件。

在你的查询的顶部:

declare variable $variable_name external;

在你的代码中:

query.bind("variable_name", some_value);

在Charles Duffy已经正确建议的基础上,这里有一个绑定完整字符串并在XQuery中对其进行标记的示例。在XQuery中绑定值并将值定义为外部值。在XQuery中拆分字符串只需使用fn:tokenize()

// create query instance
var inputquery = 'declare variable $string as xs:string external;' +
  'for $node in doc("./tags.xml")/images/image where $node/tag=tokenize($string, "s") return $node/source';
var query = session.query(inputquery);
query.bind("string", string);
query.results(log.print);
query.close();

相关内容

  • 没有找到相关文章

最新更新