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>