在做數據接口時我們通常要獲取第三方數據接口或者給第三方提供數據接口而這些數據格式通常是以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