XQuery/獲取 POST 資料
外觀
< XQuery
您想建立一個 XQuery 來訪問 HTTP POST 中的資料。
為此,您使用 request:get-data() XQuery 函式。
xquery version "1.0";
(: echo-post.xq: Return all data from an HTTP post to the caller. :)
declare namespace exist = "http://exist.sourceforge.net/NS/exist";
declare namespace xmldb="http://exist-db.org/xquery/xmldb";
declare namespace request="http://exist-db.org/xquery/request";
declare option exist:serialize "method=xml media-type=text/xml indent=yes";
let $post-data := request:get-data()
return
<post-data>
{$post-data}
</post-data>
上面的程式(稱為 echo-post.xq)對於測試您的 Web 表單非常有用。它只獲取傳送到 XQuery 服務的資料,並將其包裝在 <post-data> 標記中返回。
有時 HTTP POST 語句將其資料放在引數中。例如,RichTextEditor CKEdit 有多個文字區域,每個區域可能都包含以編碼形式的 HTML 標記。在這種情況下,您也可以在 HTTP POST 資料上使用 request:get-parameter。
在您的伺服器從 CKEditor 客戶端獲取 POST 後,伺服器將使用以下內容
在 _samples 資料夾中,您會發現有關如何使用 CKEditor 的幾個示例。這些 HTML 檔案中的每一個都有一個 HTML 表單,其中包含以下行
<form action="sample_posteddata.xq" method="post">
以下程式可以用作 sample_postdata.php 檔案的替代品。
sample_postdata.xq
xquery version "1.0";
declare option exist:serialize "method=xml media-type=text/xml omit-xml-declaration=yes indent=yes";
(: Get the content of the editor1 parameter :)
let $editor1 := request:get-parameter('editor1', '')
(: wrap the content in a div to make sure we have well-formed XML :)
let $wrapped-content := concat('<div>', $editor1, '</div>')
(: parse the escaped text so that we now have true XML markup :)
let $data-to-save := util:parse($wrapped-content)
return
<results>
{$data-to-save}
</results>
標準 HTML 表單使用一種稱為 URL 編碼表單資料的傳輸格式。
URL 編碼資料具有以下 MIME 型別
Content-Type="application/x-www-form-urlencoded"
xquery version "1.0";
let $title := 'Echo Post'
return
<results>
<title>{$title}</title>
<get-data>
{request:get-data()}
</get-data>
<headers>
{for $header in request:get-header-names()
return
<header name="{$header}" value="{request:get-header($header)}"/>
}
</headers>
<parameters>
{for $parameter in request:get-parameter-names()
return
<parameter name="{$parameter}" value="{request:get-parameter($parameter, '')}"/>
}
</parameters>
</results>
如果您有以下表單
<html>
<head><title></title></head>
<body>
<form action="echo-post.xq" method="post">
First name: <input type="text" name="FirstName" value="Mickey" /><br />
Last name: <input type="text" name="LastName" value="Mouse" /><br />
<input type="submit" value="Send HTTP Post to Server" />
</form>
</body>
</html>
那麼它將從 echo-post.xq 返回以下結果
<results>
<title>Echo Post</title>
<get-data/>
<headers>
<header name="Host" value="demo.danmccreary.com"/>
<header name="User-Agent" value="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.23) Gecko/20110920 Firefox/3.6.23"/>
<header name="Accept" value="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"/>
<header name="Accept-Language" value="en-us,en;q=0.5"/>
<header name="Accept-Encoding" value="gzip,deflate"/>
<header name="Accept-Charset" value="ISO-8859-1,utf-8;q=0.7,*;q=0.7"/>
<header name="keep-alive" value="115"/>
<header name="Connection" value="keep-alive"/>
<header name="Referer" value="http://demo.danmccreary.com/rest/db/dma/apps/xforms-examples/unit-tests/html-form-post.html"/>
<header name="Content-Type" value="application/x-www-form-urlencoded"/>
<header name="Content-Length" value="31"/>
</headers>
<parameters>
<parameter name="FirstName" value="Mickey"/>
<parameter name="LastName" value="Mouse"/>
</parameters>
</results>