加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

通过XCC将XQuery xml元素作为外部变量传递给Marklogic

发布时间:2020-12-16 07:49:30 所属栏目:百科 来源:网络整理
导读:我们有一个相当简单的XQuery和Groovy代码如下. Xquery代码: declare variable $criteria as element(criteria) external ;scopedInterventions{$criteria/equals/field}/scopedInterventions 这是试图调用它的测试代码 def uri = new URI("xcc://admin:admi
我们有一个相当简单的XQuery和Groovy代码如下.
Xquery代码:
declare variable $criteria as element(criteria) external ;

<scopedInterventions>{
$criteria/equals/field
}</scopedInterventions>

这是试图调用它的测试代码

def uri = new URI("xcc://admin:admin@localhost:8001")

def contentSource = ContentSourceFactory.newContentSource(uri)

def request = session.newModuleInvoke("ourQuery.xqy")
def criteria =
"""<criteria>
<equals>
<field>status</field>
<value>draft</value>
</equals>
</criteria>
"""

request.setNewVariable("criteria",ValueType.ELEMENT,criteria);

session.submitRequest(request).asString()
}

我们在执行时遇到此错误:

Caused by: com.marklogic.xcc.exceptions.XQueryException: XDMP-LEXVAL:
xs:QName(“element()”) — Invalid lexical value “element()” [Session:
user=admin,cb={default} [ContentSource: user=admin,cb={none}
[provider: address=localhost/127.0.0.1:9001,pool=1/64]]] [Client:
XCC/5.0-3,Server: XDBC/5.0-3] expr: xs:QName(“element()”) at
com.marklogic.xcc.impl.handlers.ServerExceptionHandler.handleResponse(ServerExceptionHandler.java:34)
at
com.marklogic.xcc.impl.handlers.EvalRequestController.serverDialog(EvalRequestController.java:83)
at
com.marklogic.xcc.impl.handlers.AbstractRequestController.runRequest(AbstractRequestController.java:84)
at
com.marklogic.xcc.impl.SessionImpl.submitRequestInternal(SessionImpl.java:373)
at
com.marklogic.xcc.impl.SessionImpl.submitRequest(SessionImpl.java:356)
at
com.zynx.galen.dataaccess.MarkLogicUtilities.executeQueryWithMultipleXMLParameters(MarkLogicUtilities.groovy:52)
at
com.zynx.galen.repositories.ScopedInterventionService.getScopedInterventionsByCriteria(ScopedInterventionService.groovy:20)
… 1 more

任何帮助都会非常感激.

http://docs.marklogic.com/javadoc/xcc/overview-summary.html有答案,我想:

Passing Variables With Queries

Variables may be bound to Request objects. When an execution request
is issued to the server with Session.submitRequest(Request) all the
variables currently bound to the Request object are sent along and
defined as external variables in the execution context in the server.

XCC lets you create XdmNodes and XdmSequences,as well as XdmAtomic
values. However,in the initial XCC release values of this type may
not be bound as external variables because MarkLogic Server cannot yet
accept them. This capability is anticipated for a future release.

由于不支持XdmNode,我认为它的子类XdmElement也不受支持.所以这些类只对响应有用,而不是请求.错误消息可能会有所改进.

您可以使用setNewStringVariable传递XML字符串,然后在XQuery模块中调用xdmp:unquote.请注意,xdmp:unquote返回文档节点,因此/ * XPath步骤会生成其根元素.

declare variable $xml-string as xs:string external ;
declare variable $criteria as element(criteria) := xdmp:unquote($xml-string)/* ;
....

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读