如何使用 eXist-db 和 xsltForms 通过浏览器编辑 xml 文件

Posted

技术标签:

【中文标题】如何使用 eXist-db 和 xsltForms 通过浏览器编辑 xml 文件【英文标题】:How to edit a xml file via browser with eXist-db and xsltForms 【发布时间】:2018-02-28 17:41:10 【问题描述】:

我对 eXist-db 比较陌生。我已经构建了一个在浏览器中显示 XML 文档的应用程序,并实现了基本搜索。

我有一个用作数据库的 .xml 文件;它包含以下记录:

<person xml:id="pe0001">
    <persName>
        <surname>Name</surname>
        <forename>Surname</forename>
    </persName>
</person>

我希望能够通过浏览器编辑此文件;例如,编辑一个人的姓名,或添加一条新记录。

我浏览了 eXist-db 文档,查看了示例,阅读了 wikibooks - 我还没有找到我需要的东西。我只需要一个文本区域,有人可以在其中输入/编辑一些文本,这些文本将被推送(我猜是使用 PUT)到 .xml 文件中。

XSLTForms 是我的最佳选择吗?谁能给我一些方向/建议/例子?谢谢!

【问题讨论】:

【参考方案1】:

根据用例,您可能想看看默认文档应用程序如何让用户打开(并运行)eXide 中的示例(使用 loadsource.js)。

对于简单的 xml 编辑,eXide 功能强大。

【讨论】:

【参考方案2】:

感谢您的反对 :) 。无论如何,我已经创建了一个 .xq 文件,它获取我想要编辑的节点的 id

let $id := request:get-parameter("id", "")

然后返回这个html代码:

     <xf:model>
        <xf:instance id="data-instance" src="my.xml" xmlns="http://www.tei-c.org/ns/1.0" />
        <xf:submission id="read-from-file" method="get"
            action="my.xml" replace="instance" instance="data-instance" />
        <xf:submission id="save-to-file" method="put"
            action="my.xml" replace="instance" instance="data-instance" />
    </xf:model>

正文

     <xf:input xmlns="" ref="//tei:person[@xml:id='$id']/tei:persName/tei:surname">
        <xf:label>Surname</xf:label>
    </xf:input>
     <xf:input xmlns="" ref="//tei:person[@xml:id='$id']/tei:persName/tei:forename">
        <xf:label>Name</xf:label>
    </xf:input>

编辑文本后,用户通过以下按钮提交:

    <xf:submit submission="save-to-file">
        <xf:label>Save</xf:label>
    </xf:submit>

【讨论】:

【参考方案3】:

我认为对于像您作为示例显示的相对简单的记录,好的 ole HTML 表单将是最简单的解决方案,它会在 eXist-db 端触发一个 XQuery 脚本来实际更新数据。例如,XForms 几乎没有什么好处,而且肯定会涉及到一个陡峭的学习曲线。

【讨论】:

以上是关于如何使用 eXist-db 和 xsltForms 通过浏览器编辑 xml 文件的主要内容,如果未能解决你的问题,请参考以下文章

eXist-db 上的 XML:错误:XPST0003 意外令牌

如何在 eXide (eXist-db) 中显示超过 10 个结果?

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

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

将 Jquery UI 添加到 XSLTForms

在 XsltForms 控件中动态更改值