开发者社区> 问答> 正文

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

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原创翻译

展开
收起
kun坤 2020-06-07 13:33:14 1156 0
1 条回答
写回答
取消 提交回答
  • 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处理函数等。


    2020-06-07 13:33:19
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Web应用系统性能优化 立即下载
高性能Web架构之缓存体系 立即下载
PWA:移动Web的现在与未来 立即下载