【问题标题】:Is there a way to pass an String Array as Variable for the server sided Xquery script?有没有办法将字符串数组作为服务器端 Xquery 脚本的变量传递?
【发布时间】:2019-10-14 01:23:57
【问题描述】:

我试图通过实现由 java 调用触发的服务器端 xquery 搜索来改进我的 Spring-Boot 服务的搜索

我尝试了一些带有循环的东西,但没有用

....

protected DatabaseClient databaseClient;

public DocumentDTO searchDocument(String language, String documentId, String... culsterIds) throws JAXBException {
        ServerEvaluationCall invoker = databaseClient.newServerEval();
      invoker.modulePath("/main/searchForDocuments.xqy")
                .addVariable("language", language)
                .addVariable("documentId", documentId)
                .addVariable("clusterIds", consentTemplateIds);
....

变量应该插入到xqy脚本中以获得对应的 参数的搜索结果。

【问题讨论】:

    标签: java xml spring-boot xquery marklogic


    【解决方案1】:

    正如您所确定的,addVariable() 只接受单个值。

    您可以将值列表序列化为 JSON 数组并使用 JSONWriteHandle 发送 JSON 数组。然后,在 XQuery 中,使用 xdmp:from-json() 将 JSON 数组节点转换为内存数组。

    或者,如果您使用的是最新版本的 MarkLogic 9,您可以使用数据服务来生成指定给您的端点模块的客户端接口:

    http://docs.marklogic.com/guide/java/DataServices

    希望对您有所帮助,

    【讨论】:

    • 非常感谢,我想我会采用第一种方法,因为数据服务方法似乎有点广泛。或者甚至可以通过将它们全部作为单个字符串传递的方式,用逗号分隔并在 xquery 中使用 tokenize 函数。非常感谢!
    • 抱歉回复晚了,非常感谢您的帮助。无论如何,我选择了一种更简单的方法:我给方法一个字符串列表作为参数,使其成为单个字符串,将其传递给 xquery 脚本,在那里我再次将其拆分为一个序列。
    猜你喜欢
    • 2019-09-11
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2019-11-14
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    相关资源
    最近更新 更多