Каталог, вероятно, содержит двоичные документы (например, PDF, изображения и т. Д.).Когда вы прочитаете эти документы с xdmp:document-get()
, вы получите binary()
узел.
Как указывает сообщение об ошибке, узлы binary()
не могут быть дочерними элементами XML-элемента.
Ваша переменная $final
будет представлять собой последовательность документов, и хотя бы один из них являетсяbinary()
узел.
Вы можете исключить эти binary()
узлы.Например, добавив фильтр предикатов к результатам xdmp:document-get()
:
let $final :=
for $each at $i in $input-dir
return
xdmp:document-get($each/dir:pathname/text(),
<options xmlns="xdmp:document-get">
<repair>full</repair>
<encoding>UTF-8</encoding>
</options>
)[not(. instance of binary())]
или вы можете base64 кодировать двоичные данные, чтобы их можно было добавить в XML:
let $final :=
for $each at $i in $input-dir
let $doc :=
xdmp:document-get($each/dir:pathname/text(),
<options xmlns="xdmp:document-get">
<repair>full</repair>
<encoding>UTF-8</encoding>
</options>)
return
if ($doc instance of binary())
then xdmp:base64-encode($doc)
else $doc