XForms/使用 get 和 put 进行读写
外观
< XForms
有时你只需要一个友好的用户界面来编辑单个静态 XML 文件。在这种情况下,静态文件是指在创建表单时你知道文件的精确路径,并且你知道文件名永远不会改变的文件。当应用程序在已知位置(绝对位置或相对于 XForm 的固定位置)具有配置文件时,就会出现这种情况。
如果这是硬盘驱动器上的本地文件,那么这很容易做到,只需要使用 get 和 put 操作,以及文件的绝对路径名或相对于表单所在目录的相对路径名即可。
XForms 还允许用户使用 HTTP get 操作从远程 Web 服务器读取数据到表单,并使用 HTTP put 操作将数据写入文件。请确保你在你的 Web 服务器上启用了 put 操作,并且你要写入的文件是可写的。这意味着你可能需要执行 chmod +w 命令,如果是 UNIX 文件。
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<head>
<title>Submission with get and put</title>
<xf:model>
<xf:instance id="data-instance" src="data.xml" xmlns="" />
<xf:submission id="read-from-file" method="get"
action="data.xml" replace="instance" instance="data-instance" />
<xf:submission id="save-to-file" method="put"
action="data.xml" replace="instance" instance="data-instance" />
</xf:model>
</head>
<body>
<p>Demonstration of using XForms to get and put data to local file using the submission element.</p>
<xf:input ref="Element1">
<xf:label>Elementu 1:</xf:label>
</xf:input>
<br />
<xf:input ref="Element2">
<xf:label>Elementul 2:</xf:label>
</xf:input>
<br />
<xf:input ref="Element3">
<xf:label>Elementuul 3:</xf:label>
<br />
</xf:input>
<xf:submit submission="read-from-file">
<xf:label>Reload</xf:label>
</xf:submit>
<xf:submit submission="save-to-file">
<xf:label>Save</xf:label>
</xf:submit>
</body>
</html>
当表单加载到浏览器时,以下文件将被读取到内存中(来自表单执行所在的相同文件夹)。当按下保存按钮时,该文件将被写入磁盘。重新加载按钮将重新加载文件到浏览器中。
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<Element1>One</Element1>
<Element2>Two</Element2>
<Element3>Three</Element3>
</Data>
请注意,当表单数据位于运行时选择的名称的文件中时,此表单不适用。这是因为 instance 中的 src
属性不是动态的。你不能在 src
属性中使用 XPath 表达式。
以下是如何在 XForms 1.1 中动态加载文件的示例
<!-- sample code that could be used in XForms 1.1 -->
<xf:submission id="read-from-file" method="get" replace="instance" instance="data-instance">
<xf:resource value="instance('my-instance')/FileNameSetByUpload"/>
</xf:submission>
请注意,如果出现这种情况,来自恶意网站的任何表单都可能能够查找已知文件或可疑文件,例如 my-passwords.doc,并在未经你同意的情况下将它们上传。如果“resource”属性(XForms 1.1 草案的一部分)得到实现,那么这个限制可能会得到缓解。
XForms 1.1 标准关于提交资源 - 这允许根据实例数据动态创建资源路径。