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 相关文章推荐
PHP版自动生成文章摘要
Jul 23 PHP
php发送post请求函数分享
Mar 06 PHP
浅析php适配器模式(Adapter)
Nov 25 PHP
几个实用的PHP内置函数使用指南
Nov 27 PHP
php读取远程gzip压缩网页的方法
Dec 29 PHP
php使用指定编码导出mysql数据到csv文件的方法
Mar 31 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
Dec 10 PHP
php 7新特性之类型申明详解
Jun 06 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
Jun 09 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
PHP让数组中有相同值的组成新的数组实例
Dec 31 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 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
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
php的dl函数用法实例
2014/11/06 PHP
ThinkPHP处理Ajax返回的方法
2014/11/22 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
PHP defined()函数的使用图文详解
2019/07/20 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
2014/05/05 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
详解AngularJS 过滤器的使用
2018/06/02 Javascript
vue webpack打包后图片路径错误的完美解决方法
2018/12/07 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
vue百度地图 + 定位的详解
2019/05/13 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
Openlayers实现测量功能
2020/09/25 Javascript
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
python实现socket+threading处理多连接的方法
2019/07/23 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
学校七一活动方案
2014/01/19 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
经理任命书模板
2014/06/06 职场文书
关于安全的广播稿
2014/10/23 职场文书
2014年教育工作总结
2014/11/26 职场文书
庆祝教师节主持词
2015/07/06 职场文书
Java 垃圾回收超详细讲解记忆集和卡表
2022/04/08 Java/Android
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL