使用 Exist-db 和 XSLTforms 将节点集插入文档
Posted
技术标签:
【中文标题】使用 Exist-db 和 XSLTforms 将节点集插入文档【英文标题】:Inserting nodeset into a document with Exist-db and XSLTforms 【发布时间】:2021-08-10 04:53:26 【问题描述】:我正在使用 XSLTforms 为非技术数据输入设置一个存在数据库实例。我想做的事情听起来很简单,但我找不到它的文档,也没有其他类似的问题,所以我猜我在这里遗漏了一些明显的东西。我想将我的 XSLTforms 实例中的节点集插入到预先存在的 xml 文件中,但不会覆盖现有数据。
<xf:submission id="s03" method="put" nodeset="instance('template')/x/y" resource="../data/XX.xml" replace="none">
在 xpath 等方面工作正常,但用新实例替换整个 xx.xml。我要做的就是将我的实例添加到文档中。我尝试了各种方法来为插入创建 xpath 上下文,但这没有奏效。
我做错了什么? 谢谢 回复
【问题讨论】:
谢谢乔,看起来它会做我想做的事。没有想过通过 xq 进行旋转,但现在这是有道理的。我稍后再试。 太棒了!如果我的回答最终为您解决了问题,请接受作为答案,这将帮助其他用户知道这是解决方案。 (有关接受和投票答案的信息,请参阅***.com/help/someone-answers.)祝你好运! 【参考方案1】:我记得在 XForms Wikibook(一个很棒的资源)的主要作者 Dan McCreary 的课堂上,PUT 确实会覆盖资源,遵循的模式是将结果发布到一个保存的 XQuery,该 XQuery 接收有效载荷并将其保存到数据库中。
作为此模式的说明,请参阅 wikibook 的文章 Displaying Save Results,其中您将 save.xq
端点接收 POST 请求的有效负载、存储结果并报告结果。
【讨论】:
抱歉耽搁了乔,这里很忙,还有一些数据库和实现的具体问题需要协商。不幸的是,这仍然覆盖了整个文档,我现在找到了说明这是默认值的存在数据库链接(没有说明如何更改它!(exist-db.org/exist/apps/doc/beginners-guide-to-xrx-v4)我想我仍然需要提供一个 某处,但事实证明这是有问题的...... 很高兴你找到了我真的应该提到的那篇文章!您确定将方法从 PUT 更改为 POST 吗?您是否注意到本文如何区分 save-new.xq 和 update.xq 端点?【参考方案2】:@Joe Wicentowski 让我走上了正确的道路,但我缺少的是更新插入的简单预返回语句:
let $update := update insert $formdata into $target
这允许我将节点集 ($formdata) 插入目标节点集 ($target),返回函数只是传达成功或错误。
【讨论】:
以上是关于使用 Exist-db 和 XSLTforms 将节点集插入文档的主要内容,如果未能解决你的问题,请参考以下文章
eXist-db 上的 XML:错误:XPST0003 意外令牌