我必须通过 shell 脚本使用命令行将一些 xml 文件导入到exist-db 中。有些文件可能已经存在,我不想覆盖这些文件。是否有命令行参数(或其他一些解决方案)使存在跳过并报告现有文件?我试过浏览官方文档,但没有找到类似的内容。
eXist 的命令行客户端不提供警告/禁用资源覆盖的能力,这是对的。(请参阅http://exist-db.org/exist/apps/doc/java-admin-client.xml#command-line 上的客户端文档。)
避免覆盖目标的最短路径是使用 WebDAV 客户端,该客户端在覆盖时发出警告并为您提供处理这种情况的选项。例如,我知道 Transmit 和 oXygen XML Editor 会在存在会被覆盖的资源/集合时提醒您。(在幕后,他们获取给定目录中的资源列表,然后在您尝试 PUT 时警告您,如果列表中有此名称的资源。)
如果必须使用命令行,那么在继续之前,您需要某种方式来列出远程集合或查询它是否存在资源。例如,如果您将此查询存储到“check.xq”中,那么您可以将其运行为bin/client.sh -F check.xq
:
doc-available("/db/my/collection/file.xml")
(: or for binary docs:
util:binary-doc-available("/db/my/collection/file.txt")
or either XML documents or binary resources:
some $resource in xmldb:get-child-resources("/db/my/collection") satisfies $resource eq "file.xml"
:)
eXist 还支持 Apache Ant(参见http://exist-db.org/exist/apps/doc/ant-tasks.xml)。虽然xdb:store
没有控制覆盖的标志,但您可以编写一个 ant 脚本,在存储文件之前首先检查文件是否存在xdb:exist
- 报告现有文件和跳过。ant 选项的好处在于您可以将参数作为命令行参数传递给它,例如ant upload-file -Ddir=/path/to -Dfile=file.xml -Dcollection=/db/my/collection
- 您可以将服务器 URL 和凭据等参数存储在build.properties
文件中。我没有准备好完整的示例,但是如果您对追求 ant 选项感兴趣,请尝试一下,如果遇到任何问题,请在评论中告诉我。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句