php怎么读写xml文件,PHP怎么读写xml文件?

2adf3beb56bd7c250caa38f017f72581.png

PHP读写XML的方法:

PHP对XML文件进行读写操作的方法一共有四种,分别是:字符串方式直接读写、DOMDocument读写、XMLWrite写和XMLReader读、SimpleXML读写,本文将依次对这四种方法进行介绍。

介绍之前首先对本文例子使用的数据和文件进行说明。本文写XML文件的例子都是从MySQL中读取数据然后写入到XML文件中,读XML文件的例子都是从XML文件中读取数据后组装成数组的格式,数组中每个元素对应数据库中的一条记录。

MySQL中的数据:

bf35813f1b701fcf28839ca2785adc11.png

XML文件:<?xml version="1.0" encoding="utf8"?>

2000

2002

培新小学

2002

2006

览表东阳学校

2006

2009

惠来慈云实验中学

2009

2012

惠来一中

2012

2016

华南师范大学

读取XML文件后组装成的数据格式:

f9cc1efe500c338f23647ab62cb87126.png

下面的例子使用的数据、文件都是以上所列数据、文件,介绍各个方法时不再赘述,直接贴代码。

一、PHP字符串方式读写XML文件:

1、字符串方式写XML文件:<?php

/**

* function:使用字符串方式写XML文件

* author:JetWu

* date:2016.12.03

**/

$mysqli = mysqli_connect('localhost', 'root', '123456', 'wjt');

if(mysqli_connect_errno()) die('database connect fail:' . mysqli_connect_error());

$sql = 'select * from study order by starttime';

$res = mysqli_query($mysqli, $sql);

$study = array();

while($row = mysqli_fetch_array($res)) {

$study[] = $row;

}

//XML标签配置

$xmlTag = array(

'starttime',

'endtime',

'school'

);

$str = "\n";

foreach($study as $v) {

$str .= "\t\n";

foreach($xmlTag as $x) {

$str .= "\t\t" . $v[$x] . "".$x.">\n";

}

$str .= "\t\n";

}

$str .= '';

$file = './write_str.xml';

file_put_contents($file, $str);

2、字符串方式读XML文件:<?php

/**

* function:使用字符串方式读XML文件

* author:JetWu

* date:2016.12.03

**/

$file = './write_str.xml';

$con = file_get_contents($file);

//XML标签配置

$xmlTag = array(

'starttime',

'endtime',

'school'

);

$arr = array();

foreach($xmlTag as $x) {

preg_match_all("/.*/", $con, $temp);

$arr[] = $temp[0];

}

//去除XML标签并组装数据

$data = array();

foreach($arr as $key => $value) {

foreach($value as $k => $v) {

$a = explode($xmlTag[$key].'>', $v);

$v = substr($a[1], 0, strlen($a[1])-2);

$data[$k][$xmlTag[$key]] = $v;

}

}

echo '

';

print_r($data);

二、DOMDocument读写XML文件

1、DOMDocument写XML文件:<?php

/**

* function:DOMDocument写XML文件

* author:JetWu

* date:2016.12.03

**/

$mysqli = mysqli_connect('localhost', 'root', '123456', 'wjt');

if(mysqli_connect_errno()) die('database connect fail:' . mysqli_connect_error());

$sql = 'select * from study order by starttime';

$res = mysqli_query($mysqli, $sql);

$study = array();

while($row = mysqli_fetch_array($res)) {

$study[] = $row;

}

//XML标签配置

$xmlTag = array(

'starttime',

'endtime',

'school'

);

$dom = new DOMDocument('1.0', 'utf8');

$dom->formatOutput = true;

$studentcareer = $dom->createElement('studentcareer');

$dom->appendChild($studentcareer);

foreach($study as $s) {

$period = $dom->createElement('period');

$studentcareer->appendChild($period);

foreach($xmlTag as $x) {

$element = $dom->createElement($x);

$period->appendChild($element);

$text = $dom->createTextNode($s[$x]);

$element->appendChild($text);

}

}

$dom->save('./write_dom.xml');

2、DOMDocument读XML文件:<?php

/**

* function:DOMDocument读XML文件

* author:JetWu

* date:2016.12.03

**/

//XML标签配置

$xmlTag = array(

'starttime',

'endtime',

'school'

);

$dom = new DOMDocument();

$dom->load('./write_dom.xml');

$periods = $dom->getElementsByTagName('period');

$study = array();

foreach($periods as $k => $p) {

foreach($xmlTag as $x) {

$node = $p->getElementsByTagName($x);

$study[$k][$x] = $node->item(0)->nodeValue;

}

}

echo '

';

print_r($study);

三、XMLWriter和XMLReader读写XML文件

1、XMLWriter写XML文件:<?php

/**

* function:XMLWriter写XML文件

* author:JetWu

* date:2016.12.03

**/

$mysqli = mysqli_connect('localhost', 'root', '123456', 'wjt');

if(mysqli_connect_errno()) die('database connect fail:' . mysqli_connect_error());

$sql = 'select * from study order by starttime';

$res = mysqli_query($mysqli, $sql);

$study = array();

while($row = mysqli_fetch_array($res)) {

$study[] = $row;

}

//XML标签配置

$xmlTag = array(

'starttime',

'endtime',

'school'

);

$xml = new XMLWriter();

$xml->openUri('./write_WR.xml');

$xml->setIndentString(' ');//设置缩进格式化使用的符号

$xml->setIndent(true);

$xml->startDocument('1.0', 'utf8');

$xml->startElement('studentcareer');

foreach($study as $s) {

$xml->startElement('period');

foreach($xmlTag as $x) {

$xml->startElement($x);

$xml->text($s[$x]);

$xml->endElement();

}

$xml->endElement();

}

$xml->endElement();

$xml->endDocument();

$xml->flush();

2、XMLReader读XML文件:<?php

/**

* function:XMLReader读XML文件

* author:JetWu

* date:2016.12.03

**/

//XML标签配置

$xmlTag = array(

'starttime',

'endtime',

'school'

);

$xml = new XMLReader();

$xml->open('./write_WR.xml');

$study = array();

$count = 0;//记录数:方便组装数据

$name = '';

while($xml->read()) {

$n = $xml->name;

if($xml->nodeType == XMLReader::ELEMENT) {

if($n == 'period') {//开始下一条记录的读取

$count ++;

} else if(in_array($n, $xmlTag)) {//记录需要获取文本值的标签名

$name = $n;

}

} else if($xml->nodeType == XMLReader::TEXT) {

if(in_array($name, $xmlTag)) {

$study[$count][$name] = $xml->value;

}

}

}

$xml->close();

echo '

';

print_r($study);

四、SimpleXML读写XML文件

1、SimpleXML写XML文件:<?php

/**

* function:SimpleXML写XML文件

* author:JetWu

* date:2016.12.03

**/

$mysqli = mysqli_connect('localhost', 'root', '123456', 'wjt');

if(mysqli_connect_errno()) die('database connect fail:' . mysqli_connect_error());

$sql = 'select * from study order by starttime';

$res = mysqli_query($mysqli, $sql);

$study = array();

while($row = mysqli_fetch_array($res)) {

$study[] = $row;

}

//XML标签配置

$xmlTag = array(

'starttime',

'endtime',

'school'

);

$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?>');

foreach($study as $s) {

$period = $xml->addChild('period');

foreach($xmlTag as $x) {

$period->addChild($x, $s[$x]);

}

}

$xml->asXml('./write_sim.xml');//输出XML文件(没有格式化)

2、SimpleXML读XML文件:<?php

/**

* function:SimpleXML读XML文件

* author:JetWu

* date:2016.12.03

**/

//XML标签配置

$xmlTag = array(

'starttime',

'endtime',

'school'

);

$study = array();

$xml = simplexml_load_file('./write_sim.xml');

foreach($xml->children() as $period) {

$study[] = get_object_vars($period);//获取对象全部属性,返回数组

}

echo '

';

print_r($study);

总结:这四种方法中,字符串的方式是最原始的方法。SimpleXML和DOM扩展是属于基于树的解析器,把整个文档存储为树的数据结构中,需要把整个文档都加载到内存中才能工作,所以当处理大型XML文档的时候,性能会剧减。XMLReader则是属于基于流的解析器,它不会一次把整个文档加载到内存中,而是每次分别读取其中的一个节点并允许实时与之交互,这种方式效率高,而且占内存少。

更多相关知识,请访问 PHP中文网!!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值