生成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_errpr());
while($row=mysql_fetch_array($result)){
$arr[] = array(
'name'=>$row['name'],
'sex'=>$row['sex'],
'age'=>$row['age']
);
}
这时候,数据就保存在$arr中,接着,建立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>SNK</name>
<sex>男</sex>
<age>23</age>
</data>
...
</root>
获取XML格式数据
PHP有很多中方法可以解析XML,其中PHP提供了内置的XMLReader类可以循序地浏览过xml档案的节点,你可以想像成游标走过整份文件的节点,并抓取需要的内容。使用XMLReader是高效的,尤其是读取非常大的xml数据,相对其他方法,使用XMLReader消耗内存非常少。
header("Content-type:text/html;Charset=utf-8");
$url = '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;
if($m==2)
$sex = $reader->value;
if($m==3)
$age = $reader->value;
$arr[] = array(
'name'=>$name,
'sex'=>$sex,
'age'=>$age
);
}
$i++;
}
为了将数据name,sex和age分开,我们使用$i%3来判断取模,因为在获取的xml中,节点data下的信息是以3个子节点存在的