XForms – 新的 Web 表单标准:报错 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

XForms – 新的 Web 表单标准:报错

2020-06-07 13:33:14 704 1

XForms 肯定是下一代的基于 Web 的数据处理技术规范,XForms 可替换传统的 HTML 表单,使用 XML 数据模型和呈现元素。

在某些情况下,XForms 就等同于 HTML 表单,通过合适的编码服务器端接受的数据跟普通的表单没有区别。但是 XForms 表单比 HTML 表单要强很多,包括可直接用 XML 格式进行数据提交。这里我们将创建一个 PHP 脚本来接收通过XForms 提交过来的 XML数据。

示例: 使用 XForms 的搜索表单
<h:html xmlns:h=“http://www.w3.org/1999/xhtml”
xmlns=“http://www.w3.org/2002/xforms”>
<h:head>
<h:title>Search</h:title>
<model>
<submission action=“http://example.com/search”
method=“post” id=“ss”/>
</model>
</h:head>
<h:body>
<h:p>
<input ref=“find”><label>Find</label></input>
<submit submission=“submit”><label>Go</label></submit>
</h:p>
</h:body>
</h:html>

上述表单显示一个文本输入框和一个提交按钮,当点击提交按钮时将会提交表单到 action。

这里跟普通的 web 应用有点不同,在一个正常的 HTML 表单中,数据使用 application/x-www-form-urlencoded 编码进行发送,而 XForms 的世界里,数据默认使用 XML 格式。

如果你选择了 XForms 那么你在服务器上可通过 $HTTP_RAW_POST_DATA 来获取表单提交上来的 XML 文档数据。

如果你对格式不感兴趣,可通过 $_POST变量获取提交的数据。你也可以要求浏览器使用 application/x-www-form-urlencoded 这个传统的编码来提交数据,只需要修改 method 属性为 urlencoded-post 即可.

示例: 使用 XForm 填充 $_POST

<h:html xmlns:h=“http://www.w3.org/1999/xhtml”
xmlns=“http://www.w3.org/2002/xforms”>
<h:head>
<h:title>Search</h:title>
<model>
<submission action=“http://example.com/search”
method=“urlencoded-post” id=“ss”/>
</model>
</h:head>
<h:body>
<h:p>
<input ref=“find”><label>Find</label></input>
<submit submission=“submit”><label>Go</label></submit>
</h:p>
</h:body>
</h:html>

接下来我们使用 PHP 来接收数据,XForms 表单数据使用 POST 方法提交,因此我们需要在 PHP 中访问 $HTTP_RAW_POST_DATA 变量:

示例:基本的 PHP 代码:

<?php
if (!isset($HTTP_RAW_POST_DATA))
$HTTP_RAW_POST_DATA = file_get_contents(“php://input”);
header(“Content-type: text/plain”);
echo $HTTP_RAW_POST_DATA;
?>

很多默认的 PHP 安装是不会设置 $HTTP_RAW_POST_DATA 变量的,它必须指定配置才能启用。幸运的是你还可以使用 file_get_contents() 函数来从输入数据中读取。

一旦你将数据转成字符串就可直接作为纯文本输出到浏览器,只需设置 content-type 为 text/plain 即可。这样当你提交表单时就可以看到使用 XML 格式的表单数据。

很棒,但实际中怎么处理呢?PHP可以让你很方便的直接通过XML格式字符串创建一个 DOC 文档对象。

接下来我们来处理数据。
示例:一个示例XML文档

<?xml version=“1.0″ encoding=“UTF-8″?>
<bookstore>
<book>
<book_id>BOOK001</book_id>
<book_name>Introduction to Electrodynamics</book_name>
<isbn_no>0000979001</isbn_no>
<book_price>95.00<book_price>
</book>
<book>
<book_id>BOOK002</book_id>
<book_name>Understanding of Steel Construction</book_name>
<isbn_no>0000979002</isbn_no>
<book_price>115.50<book_price>
</book>
<book>
<book_id>BOOK003</book_id>
<book_name>This is Guide to Networking</book_name>
<isbn_no>0000979003</isbn_no>
<book_price>210.00<book_price>
</book>
<book>
<book_id>BOOK004</book_id>
<book_name>This is Transfer of Heat and Mass</book_name>
<isbn_no>0000979004</isbn_no>
<book_price>260.00<book_price>
</book>
</bookstore>
示例:管理数据的表单

<?xml version=“1.0″?>
<html xmlns=“http://www.w3.org/1999/xhtml”
xmlns:ev=“http://www.w3.org/2001/xml-events”
xmlns:xforms=“http://www.w3.org/2002/xforms”>
<head>
<title>This is XForms in PHP Example </title>
<xforms:model id=“model_bookstore”>
<xforms:instance id=“instance_model_bookstore” src=“bookstore.xml”/>
<xforms:submission id=“submit_model_bookstore”
action=“http://localhost/php/xforms/xforms.php”
method=“post”/>
</xforms:model>
</head>
<body>
<xforms:submit submission=“submit_model_bookstore”>
<xforms:label>Submit</xforms:label>
</xforms:submit>
</body>
</html>
示例:用来处理数据的 PHP表单

<?php
if (!isset($HTTP_RAW_POST_DATA))
$HTTP_RAW_POST_DATA = file_get_contents(“php://input”);
$doc = new DOMDocument();
q $doc->loadXML($HTTP_RAW_POST_DATA);
$allBooks = $doc->getElementsByTagName(‘book’);
$numBooks = $allBooks->length;
echo “There are ”.$numBooks.“ books”;
?>

接下来可以创建一个新的 DOM 文档对象,并使用 loadXML 来加载字符串数据然后进行下一步处理。

英文原文OSCHINA原创翻译

取消 提交回答
全部回答(1)
  • kun坤
    2020-06-07 13:33:19

    xform可以直接映射xml数据?恩 服务端的东西再次被简化吗?######XForms是XHTML 2.0的表单标准。现在XHTML2完蛋,不知道这个是非还在继续。4-5年前就一直在开发技术,到现在还只是草案,基本上网页里面没人用。

    翻译前最好仔细看看这到底是什么东西。######XForms 很早的技术了,现在基本没有人在用######简单的东西复杂化,有意思没。
    ######哦。
    ######这個技术我居然完全没听说过,孤陋寡闻了...
    ######现在的数据交互都尽量JSON化,这种XML的东西怎么还会是新的标准?显然是老东西了。######推荐使用xforms标准实现GForms开发平台(http://blog.csdn.net/ghpaas/article/details/30222989),GForms开发平台让开发人员甚至非技术人员在短短几分钟内创建全功能的展现服务,让开发团队更加适应客户和市场的需求,从而提高客户服务和速度实现收益。该开发平台提供可视化的设计器、运行时,设计器基于eclipse开发,非常的简单,完全实现xforms1.1标准,并且支持开发人员编写样式、javascript处理函数等。


    0 0
相关问答

5

回答

Spark 【问答合集】

社区小助手 2019-05-29 14:13:40 130745浏览量 回答数 5

169

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 240218浏览量 回答数 169

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 160608浏览量 回答数 145

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 149454浏览量 回答数 22

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 148585浏览量 回答数 31

3

回答

mySQL数据库报错You have an error in your SQL syntax

落地花开啦 2016-02-14 16:09:24 134263浏览量 回答数 3

43

回答

【精品问答集锦】Python热门问题

小六码奴 2019-05-30 15:27:34 146237浏览量 回答数 43

251

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 314413浏览量 回答数 251

97

回答

Redhat/CentOS一键安装web环境全攻略

xiaofanqie 2011-08-11 14:51:38 125312浏览量 回答数 97

24

回答

【精品问答】python技术1000问(1)

问问小秘 2019-11-15 13:25:00 493886浏览量 回答数 24
+关注
0
文章
13397
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载