我一直在通过教程来构建与marklogic休息服务。我已经通过使用roxy deploy工具和调用ml ext来构建了一个简单的示例。我的问题是试图通过休息呼叫从文档中获取特定元素。以下是我迄今为止:marklogic休息调用xpath操作[文档元素后的垃圾]
declare
%roxy:params("dataType=xs:string","pNumber=xs:number", "sNumber=xs:string", "searchTerm=xs:string")
function jad:get(
$context as map:map,
$params as map:map
) as document-node()*
{
map:put($context, "output-types", "application/xml"),
map:put($context, "accept-types", "multipart/mixed"),
map:put($context, "output-status", (200, "OK")),
let $doc := doc('testNew.xml')
let $docs := $doc//stuff/pData/sData/headerData/bData/sitData[contains(., 'word')]
let $c := json:config("custom"),
$_ := map:put($c,"whitespace", "ignore"),
$_ := map:put($c , "camel-case" , fn:true())
let $results := search:search("word",
<options xmlns="http://marklogic.com/appservices/search">
<transform-results apply="raw"/>
</options>)
return document{$doc//stuff/pData/sData/headerData/bData/sitData[contains(., 'word')]}
这已经经过了许多反复,但最终的问题是,我似乎不能简单地沿着内休息的XPath返回文档。当我呼吁这个网址我得到这样的错误:
经过许多环节计算器看完这似乎从纯XPath返回一个片段干。问题是我不知道如何返回完整的结果。我曾经在某处读过我可以在我的“rest-api”文件夹中的某处设置属性,但这并没有阻止这个问题。所以我最终希望能够搜索关键字的特定文档的内部结构。
编辑:我会更好使用RXQ为此目的?
我认为罪魁祸首是不是事实,你正在返回一个xml片段,但是您可能会将多个片段嵌入到一个文档节点中,这将成为无效的XML。将XPath从$ doc包装到使用'(..)[1]'的谓词后面,只选择第一个匹配的sitData以验证此想法。如果有帮助,退后一步,并考虑如何处理多个匹配。 – grtjn
@grtjn所以这就是我想弄明白。如果我想搜索数据库中的特定文档,我不确定如何在不使用xpath的情况下完成该操作,并且如果文档中有多个xml片段,我怎样才能将它们作为单个文档发送。 – Joshhw