查询生成 'XDMP-CHILDNODEKIND: $final -- element nodes cannot have binary node children' 错误
Query generate 'XDMP-CHILDNODEKIND: $final -- element nodes cannot have binary node children' error
下面是我的简单查询,它从一个目录中读取所有文件并将所有文件保存在 $final 变量中保存在一个文件中。
但是在运行这个查询的时候,花了一些时间之后,提示[1.0-ml] XDMP-CHILDNODEKIND: $final -- element nodes cannot have binary node children 错误。
let $input-dir :=xdmp:filesystem-directory("d:\work\may-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-05-2019\ALL-FEEDS-INPUT-OUTPUT\CLC\LOG\COMBINE-XMLs\Combine-CLC-TRUE-INPUT.xml",
document{<records>{$final}</records>})
其实我本地有10000个小文件,想合并成一个文件
该目录可能包含二进制文档(即 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 encode 二进制数据,以便将其添加到 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
下面是我的简单查询,它从一个目录中读取所有文件并将所有文件保存在 $final 变量中保存在一个文件中。
但是在运行这个查询的时候,花了一些时间之后,提示[1.0-ml] XDMP-CHILDNODEKIND: $final -- element nodes cannot have binary node children 错误。
let $input-dir :=xdmp:filesystem-directory("d:\work\may-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-05-2019\ALL-FEEDS-INPUT-OUTPUT\CLC\LOG\COMBINE-XMLs\Combine-CLC-TRUE-INPUT.xml",
document{<records>{$final}</records>})
其实我本地有10000个小文件,想合并成一个文件
该目录可能包含二进制文档(即 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 encode 二进制数据,以便将其添加到 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