使用PHP生成和獲取XML格式數據

  在作數據接口時,咱們一般要獲取第三方數據接口或者給第三方提供數據接口,而這些數據格式一般是以XML或者JSON格式傳輸,本文將介紹如何使用PHP生成XML格式數據供第三方調用以及如何獲取第三方提供的XML數據。php

  生成XML格式數據html

  咱們假設系統中有一張學生信息表student,須要提供給第三方調用,並有id,name,sex,age分別記錄學生的姓名、性別、年齡等信息。node

  CREATE TABLE `student` (mysql

  `id` int(11) NOT NULL auto_increment,web

  `name` varchar(50) NOT NULL,sql

  `sex` varchar(10) NOT NULL,數據庫

  `age` smallint(3) NOT NULL default '0',數組

  PRIMARY KEY  (`id`)app

  ) 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("root");

  $doc->appendChild($r);

  foreach ($arr as $dat) {

  $b = $doc->createElement("data");

  $name = $doc->createElement("name");

  $name->appendChild($doc->createTextNode($dat['name']));

  $b->appendChild($name);

  $sex = $doc->createElement("sex");

  $sex->appendChild($doc->createTextNode($dat['sex']));

  $b->appendChild($sex);

  $age = $doc->createElement("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個子節點存在的。

  最後,你能夠將獲取到的數據輸出或者執行SQL語句,將數據寫入本地數據庫,此步驟略過http://wh.28banjia.cn/sitemaps.xml

相關文章
相關標籤/搜索