熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

PHP生成和獲取XML格式數據

2013-11-15 12:47:10  來源: PHP編程 

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

  生成XML格式數據

  我們假設系統中有一張學生信息表student需要提供給第三方調用並有idnamesexage分別記錄學生的姓名性別年齡等信息

  CREATE TABLE `student` (

  `id` int() NOT NULL auto_increment

  `name` varchar() NOT NULL

  `sex` varchar() NOT NULL

  `age` smallint() NOT NULL default

  PRIMARY KEY  (`id`)

  ) ENGINE=MyISAM  DEFAULT CHARSET=utf;

  首先建立createXMLphp文件先連接數據庫獲取數據

  include_once (connectphp //連接數據庫

  $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( utf  // 聲明版本和編碼

  $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= encoding=utf?>

  <root>

  <data>

  <name>李王皓</name>

  <sex>男</sex>

  <age></age>

  </data>

  …

  </root>

  獲取XML格式數據

  現在我們假設要從第三方獲取學生信息數據格式是XML我們需要使用PHP解析XML然後將解析後的數據顯示或者寫入本地數據庫而這裡關鍵的一步是解析XML

  PHP有很多中方法可以解析XML其中PHP提供了內置的XMLReader類可以循序地浏覽過xml檔案的節點你可以想像成游標走過整份文件的節點並抓取需要的內容使用XMLReader是高效的尤其是讀取非常大的xml數據相對其他方法使用XMLReader消耗內存非常少

  header(Contenttype:text/html; Charset=utf

  $url = http://wwwhellowebacom/demo/importXML/createXMLphp;

  $reader = new XMLReader()  //實例化XMLReader

  $reader>open($url) //獲取xml

  $i=;

  while ($reader>read()) {

  if ($reader>nodeType == XMLReader::TEXT) { //判斷node類型

  $m = $i%;

  if($m==

  $name = $reader>value;  //讀取node值

  if($m==

  $sex = $reader>value;

  if($m==){

  $age = $reader>value;

  $arr[] = array(

  name => $name

  sex => $sex

  age => $age

  )

  }

  $i++;

  }

  }

  //print_r($arr)

  為了將數據namesex和age分開我們使用$i%來判斷取模因為在獲取的xml中節點data下的信息是以個子節點存在的


From:http://tw.wingwit.com/Article/program/PHP/201311/21636.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.