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 相关文章推荐
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
Apr 25 PHP
php 定界符格式引起的错误
May 24 PHP
php5.3不能连接mssql数据库的解决方法
Dec 27 PHP
php实现汉字验证码和算式验证码的方法
Mar 07 PHP
php实现只保留mysql中最新1000条记录
Jun 18 PHP
列举PHP的Yii 2框架的开发优势
Jul 03 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
Yii2中关联查询简单用法示例
Aug 10 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
Dec 25 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
php查询内存信息操作示例
May 09 PHP
Laravel解决nesting level错误和隐藏index.php的问题
Oct 12 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设置编码格式的方法
2013/03/05 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
Javascript浅谈之this
2013/12/17 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
移动端js图片查看器
2016/11/17 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
python变量的存储原理详解
2019/07/10 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
有原因的手表:Flex Watches
2019/03/23 全球购物
写好自荐信需做到的5要点
2014/03/07 职场文书
2016猴年春节问候语
2015/11/11 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
会计入职心得体会
2016/01/22 职场文书
北京大学中文系教授推荐的10本小说
2019/08/08 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
虚拟机linux端mysql数据库无法远程访问的解决办法
2021/05/26 MySQL