跳轉到內容

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 標準關於提交資源 - 這允許根據例項資料動態建立資源路徑。


華夏公益教科書