PHP生成和获取XML格式数据的方法


Posted in PHP onMarch 04, 2016

本文实例讲述了PHP生成和获取XML格式数据的方法。分享给大家供大家参考,具体如下:

在做数据接口时,我们通常要获取第三方数据接口或者给第三方提供数据接口,而这些数据格式通常是以XML或者JSON格式传输,这里将介绍如何使用PHP生成XML格式数据供第三方调用以及如何获取第三方提供的XML数据。

生成XML格式数据

我们假设系统中有一张学生信息表student,需要提供给第三方调用,并有id,name,sex,age分别记录学生的姓名、性别、年龄等信息。

CREATE TABLE `student` (
 `id` int(11) NOT NULL auto_increment,
 `name` varchar(50) NOT NULL,
 `sex` varchar(10) NOT NULL,
 `age` smallint(3) NOT NULL default '0',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

首先,建立createXML.php文件,先连接数据库,获取数据。

include_once ("connect.php"); //连接数据库
$sql = "select * from student";
$result = mysql_query($sql) or die("Invalid query: " . mysql_error());
while ($row = mysql_fetch_array($result)) {
  $arr[] = array(
    'name' => $row['name'],
    'sex' => $row['sex'],
    'age' => $row['age']
  );
}

这个时候,数据就保存在$arr中,你可以使用print_r打印下数据测试。
接着,建立xml,循环数组,将数据写入到xml对应的节点中。

$doc = new DOMDocument('1.0', 'utf-8'); // 声明版本和编码
$doc->formatOutput = true;
$r = $doc->createElement_x("root");
$doc->appendChild($r);
foreach ($arr as $dat) {
  $b = $doc->createElement_x("data");
  $name = $doc->createElement_x("name");
  $name->appendChild($doc->createTextNode($dat['name']));
  $b->appendChild($name);
  $sex = $doc->createElement_x("sex");
  $sex->appendChild($doc->createTextNode($dat['sex']));
  $b->appendChild($sex);
  $age = $doc->createElement_x("age");
  $age->appendChild($doc->createTextNode($dat['age']));
  $b->appendChild($age);
  $r->appendChild($b);
}
echo $doc->saveXML();

我们调用了PHP内置的类DOMDocument来处理与生成xml。最终生成的xml格式请点击这里看效果

<?xml version="1.0" encoding="utf-8"?>
<root>
 <data>
  <name>李王皓</name>
  <sex>男</sex>
  <age>21</age>
 </data>
 ...
</root>

获取XML格式数据

现在我们假设要从第三方获取学生信息,数据格式是XML,我们需要使用PHP解析XML,然后将解析后的数据显示或者写入本地数据库。而这里关键的一步是解析XML。

PHP有很多中方法可以解析XML,其中PHP提供了内置的XMLReader类可以循序地浏览过xml档案的节点,你可以想像成游标走过整份文件的节点,并抓取需要的内容。使用XMLReader是高效的,尤其是读取非常大的xml数据,相对其他方法,使用XMLReader消耗内存非常少。

header("Content-type:text/html; Charset=utf-8");
$url = "http://www.helloweba.com/demo/importXML/createXML.php";
$reader = new XMLReader(); //实例化XMLReader
$reader->open($url); //获取xml
$i=1;
while ($reader->read()) {
 if ($reader->nodeType == XMLReader::TEXT) { //判断node类型
   $m = $i%3;
   if($m==1)
     $name = $reader->value; //读取node值
   if($m==2)
     $sex = $reader->value;
   if($m==0){
     $age = $reader->value;
     $arr[] = array(
       'name' => $name,
       'sex' => $sex,
       'age' => $age
     );
   }
   $i++;
 }
}
//print_r($arr);

为了将数据name,sex和age分开,我们使用$i%3来判断取模,因为在获取的xml中,节点data下的信息是以3个子节点存在的。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
从网上搜到的phpwind 0day的代码
Dec 07 PHP
PHP管理内存函数 memory_get_usage()使用介绍
Sep 23 PHP
PHP人民币金额数字转中文大写的函数代码
Feb 27 PHP
PHP数组排序函数合集 以及它们之间的联系分析
Jun 27 PHP
php 常用算法和时间复杂度
Jul 01 PHP
php实现window平台的checkdnsrr函数
May 27 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
php利用header函数下载各种文件
Aug 24 PHP
php使用curl代理实现抓取数据的方法
Feb 03 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
Feb 10 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
PHP使用fopen与file_get_contents读取文件实例分享
Mar 04 #PHP
PHP截取IE浏览器并缩小原图的方法
Mar 04 #PHP
zend framework中使用memcache的方法
Mar 04 #PHP
PHP结合Mysql数据库实现留言板功能
Mar 04 #PHP
实现PHP框架系列文章(6)mysql数据库方法
Mar 04 #PHP
Codeigniter中集成smarty和adodb的方法
Mar 04 #PHP
PHP常用技巧汇总
Mar 04 #PHP
You might like
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
php实现统计目录文件大小的函数
2015/12/25 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
javascript实现很浪漫的气泡冒出特效
2020/09/05 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
JavaScript日期选择功能示例
2017/01/16 Javascript
Angular中的interceptors拦截器
2017/06/25 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
[54:08]LGD女子刀塔学院 DOTA2炼金术士教学
2014/01/09 DOTA
python创建列表并给列表赋初始值的方法
2015/07/28 Python
在 Python 应用中使用 MongoDB的方法
2017/01/05 Python
不要用强制方法杀掉python线程
2017/02/26 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
Python利用openpyxl库遍历Sheet的实例
2018/05/03 Python
python实现大学人员管理系统
2019/10/25 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
意大利奢侈品网站:Italist
2016/08/23 全球购物
eBay德国站:eBay.de
2017/09/14 全球购物
高中生活自我鉴定
2014/01/18 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
企业2014年度工作总结
2014/12/10 职场文书
导游词书写之黄山
2019/08/06 职场文书
python批量更改目录名/文件名的方法
2021/04/18 Python
golang的文件创建及读写操作
2022/04/14 Golang