我必须使用命令行通过shell脚本将大量xml文件导入到exists-db中。有些文件可能已经存在,我不想覆盖这些文件。是否存在命令行参数(或其他解决方案)使存在跳过并报告现有文件?我试过浏览官方文档,但我找不到类似的东西。
答案 0 :(得分:1)
你是对的,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
- 你可以在build.properties
文件中存储服务器URL和凭证等参数。我没有准备好完整的例子,但如果你对追求蚂蚁选项感兴趣,试试看,如果遇到任何问题,请在评论中告诉我。