跳转到内容

XForms/使用 get 和 put 进行读写

来自 Wikibooks,开放世界中的开放书籍

有时你只需要一个友好的用户界面来编辑单个静态 XML 文件。在这种情况下,静态文件是指在创建表单时你知道文件的精确路径,并且你知道文件名永远不会改变的文件。当应用程序在已知位置(绝对位置或相对于 XForm 的固定位置)具有配置文件时,就会出现这种情况。

如果这是硬盘驱动器上的本地文件,那么这很容易做到,只需要使用 get 和 put 操作,以及文件的绝对路径名或相对于表单所在目录的相对路径名即可。

XForms 还允许用户使用 HTTP get 操作从远程 Web 服务器读取数据到表单,并使用 HTTP put 操作将数据写入文件。请确保你在你的 Web 服务器上启用了 put 操作,并且你要写入的文件是可写的。这意味着你可能需要执行 chmod +w 命令,如果是 UNIX 文件。

屏幕图像

[编辑 | 编辑源代码]
使用 XForms 读取和写入静态文件的示例

示例程序

[编辑 | 编辑源代码]
<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>

示例 data.xml 实例文件

[编辑 | 编辑源代码]

当表单加载到浏览器时,以下文件将被读取到内存中(来自表单执行所在的相同文件夹)。当按下保存按钮时,该文件将被写入磁盘。重新加载按钮将重新加载文件到浏览器中。

<?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 标准关于提交资源 - 这允许根据实例数据动态创建资源路径。


华夏公益教科书