PHP读写XML文件的四种方法
Posted Lucky_man
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP读写XML文件的四种方法相关的知识,希望对你有一定的参考价值。
php对XML文件进行读写操作的方法一共有四种,分别是:字符串方式直接读写、DOMDocument读写、
XMLWrite写和XMLReader读、SimpleXML读写,本文将依次对这四种方法进行介绍。
介绍之前首先对本文例子使用的数据和文件进行说明。本文写XML文件的例子都是从mysql中读取数据然后
写入到XML文件中,读XML文件的例子都是从XML文件中读取数据后组装成数组的格式,数组中每个元素对应数
据库中的一条记录。
MySQL中的数据:
XML文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<?xml version= "1.0" encoding= "utf8" ?> <studentcareer> <period> <starttime>2000</starttime> <endtime>2002</endtime> <school>培新小学</school> </period> <period> <starttime>2002</starttime> <endtime>2006</endtime> <school>览表东阳学校</school> </period> <period> <starttime>2006</starttime> <endtime>2009</endtime> <school>惠来慈云实验中学</school> </period> <period> <starttime>2009</starttime> <endtime>2012</endtime> <school>惠来一中</school> </period> <period> <starttime>2012</starttime> <endtime>2016</endtime> <school>华南师范大学</school> </period> </studentcareer> |
读取XML文件后组装成的数据格式:
下面的例子使用的数据、文件都是以上所列数据、文件,介绍各个方法时不再赘述,直接贴代码。
一、PHP字符串方式读写XML文件:
1. 字符串方式写XML文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<?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 = "<studentcareer>\\n" ; foreach ( $study as $v ) { $str .= "\\t<period>\\n" ; foreach ( $xmlTag as $x ) { $str .= "\\t\\t<" . $x . ">" . $v [ $x ] . "</" . $x . ">\\n" ; } $str .= "\\t</period>\\n" ; } $str .= \'</studentcareer>\' ; $file = \'./write_str.xml\' ; file_put_contents ( $file , $str ); |
2. 字符串方式读XML文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<?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( "/<" . $x . ">.*<\\/" . $x . ">/" , $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 \'<pre>\' ; print_r( $data ); |
二、DOMDocument读写XML文件
1. DOMDocument写XML文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<?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文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?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 \'<pre>\' ; print_r( $study ); |
三、XMLWriter和XMLReader读写XML文件
1. XMLWriter写XML文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<?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文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<?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 \'<pre>\' ; print_r( $study ); |
四、SimpleXML读写XML文件
1. SimpleXML写XML文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<?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"?><studentcareer />\' ); foreach ( $study as $s ) {
|