在做数据接口时我们通常要获取第三方数据接口或者给第三方提供数据接口而这些数据格式通常是以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下的信息是以个子节点存在的