使用PHP生成和获取XML格式数据

本文介绍如何使用PHP创建并生成XML格式的数据,包括数据的存储与XML文档的构建,以及如何通过PHP的XMLReader类高效解析XML数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生成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个子节点存在的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值