首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行搜索时,无效强制:()为xs:string+:search($qtext)

执行搜索时,无效强制:()为xs:string+:search($qtext)
EN

Stack Overflow用户
提问于 2016-12-10 10:07:35
回答 2查看 1.1K关注 0票数 1

我正在向MarkLogic服务器发送一个http请求,类似于- http://localhost:7040/index.xqy。请求是使用xdmp:get-request-field("q")捕获的,后者将查询接受到变量中,比如$qtext,并将其传递给search:search($qtext)

这将返回404

<error:xquery-version>1.0-ml</error:xquery-version> <error:message>Invalid coercion</error:message> <error:format-string>XDMP-AS: (err:XPTY0004) $qtext as xs:string+ -- Invalid coercion: () as xs:string+</error:format-string>

我在这里做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-10 10:07:35

我找到了解决办法。基本上,$qtext是空序列(),在搜索:搜索中是不允许的。我所做的是-

let $query := if(fn:empty($q-text)) then "" else $q-text

您还可以将请求更改为类似于localhost:7040/index.xqy?q=的内容--这个链接帮助了http://jaketrent.com/post/unexpected-results-marklogic-xquery-type-coercion/

正如所建议的,这是更好的xdmp:get-request-field("q", "")

票数 3
EN

Stack Overflow用户

发布于 2016-12-10 21:27:05

在XQuery中简明地提供默认值的一个非常有用的成语依赖于xs:string到xs:boolean的转换规则以及

代码语言:javascript
复制
$sequence[.]

使用“.”当序列表达式中的谓词将序列中的每个项计算为布尔值时,如果为true,则包含该项,如果为false,则排除该项。对于非零长度字符串,xs:string的转换规则为“true”,对于零长度或空序列,“false”为“false”。以下是xs序列的详细等效:string。

对于$item in $sequence,返回if( not(空( $item) )和string-length( $item ) >0),然后返回$item$item ()

因此,以下模式通常用于“如果$x不是空的或零长度,则使用$x,否则使用$y。

代码语言:javascript
复制
( $x , $y )[.][1]

注意'1‘,它选择由前一个表达式产生的第一个项目。为$x提供默认值的示例,如

代码语言:javascript
复制
 ($x , "Default value")[.][1]

对职能的结果或论点也是如此:

代码语言:javascript
复制
cts:search( doc() , ( get-the-search-string() , "default")[.][1] )

其中'get-the-search- string ()‘可能返回一个空序列、一个零长度字符串或一个1或多个字符串序列。

在您的示例中,您希望默认使用一个空字符串,因此可以使用一个细微的变体来允许一个"“,而不是()

代码语言:javascript
复制
let $query := ($q-text,"")[1]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41074319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档