首页 > 解决方案 > MarkLogic 无法将变量分配给 cts:document-query()

问题描述

如何将变量分配给 cts:document-query()。我有从文件系统读取的示例代码,然后将变量分配给文档查询()。但它会排除错误。

案例 1)在没有将变量分配给文档查询的情况下工作。

let $list-pdf := cts:search(/,cts:and-query((
                          cts:directory-query("/pdf/"),
                          cts:document-query(("/pdf/US1610547.pdf", "/pdf/US1696102.pdf", 
                         "/pdf/US1953345.pdf"))) 
 for $pdf in $list-pdf 
return base-uri($pdf)

返回结果:

 /pdf/US1610547.pdf
 /pdf/US1696102.pdf

案例 2 - 从文件系统读取后,我将变量分配给 document-query()。MarkLogic 给了我错误。

let $pdf := xdmp:filesystem-file("/output/listpdf.txt")
let $pdfs := tokenize($pdf,"\n")
let $list-pdf := cts:search(/,cts:and-query((
                          cts:directory-query("/pdf/"),
                          cts:document-query(($pdfs))
                                                                    ))) 
for $pdf in $list-pdf 
return base-uri($pdf)

返回错误代码:

[1.0-ml] XDMP-URI: cts:document-query(("/pdf/US1610547.pdf", "/pdf/US1696102.pdf",...)) -- Invalid URI format: ""

标签: marklogic

解决方案


错误消息表明标记化的结果在 URI 序列中包含一个空字符串项:

-- Invalid URI format: ""

您可以在标记化后应用谓词以排除空字符串(或使用更复杂的逻辑,具体取决于您的输入可以信任的程度),即:

let $pdfs := tokenize($pdf,"\n")[. ne ""]

推荐阅读