使用 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 意外令牌

XForms 重复:相同的元素名称,不同的值约束

将 Jquery UI 添加到 XSLTForms

Fulltext Xquery (Lucene/KWIC) 不适用于“标记”结果。 eXist-db 错误?

XsltForms 中的只读控件

markdown 使用eXist-db和Lucene对中文文本进行全文搜索