Запрос генерирует ошибку 'XDMP-CHILDNODEKIND: $final - узлы элемента не могут иметь дочерние элементы двоичного узла'
Ниже приведен мой простой запрос, который считывает все файлы из каталога и хранит все файлы в переменной $final. Сохранение в одном файле.
Но при выполнении этого запроса через некоторое время он выдает [1.0-ml] XDMP-CHILDNODEKIND: $final - узлы элемента не могут иметь ошибку дочерних элементов двоичного узла.
let $input-dir :=xdmp:filesystem-directory("d:\work\may\06-05-2019\all-
feeds-input-output\clc\log\clc-true-ouput\")/dir:entry
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>)
return
xdmp:save("D:\WORK\MAY\06-05-2019\ALL-FEEDS-INPUT-OUTPUT\CLC\LOG\COMBINE-XMLs\Combine-CLC-TRUE-INPUT.xml",
document{<records>{$final}</records>})
На самом деле, у меня есть 10000 небольших файлов в локальной системе, и я хочу объединить в один файл.
1 ответ
Каталог, вероятно, содержит двоичные документы (например, 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