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) {

    $period $xml->addChild(‘period‘);

    foreach($xmlTag as $x) {

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

    }

}

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

2. SimpleXML读XML文件:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<?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 ‘<pre>‘;

print_r($study);

  总结:这四种方法中,字符串的方式是最原始的方法。SimpleXML和DOM扩展是属于基于树的解析器,把整个文档存储

为树的数据结构中,需要把整个文档都加载到内存中才能工作,所以当处理大型XML文档的时候,性能会剧减。XMLReader

则是属于基于流的解析器,它不会一次把整个文档加载到内存中,而是每次分别读取其中的一个节点并允许实时与之交互,这种

方式效率高,而且占内存少。

时间: 2024-10-10 02:12:50

PHP读写XML文件的四种方法的相关文章

Java解析XML文件的四种方法

[摘要] 可扩展标志语言(XML)在实现信息标准化.信息的交流与共享上有其独特的技术优势,因此受到了广泛的重视.本文先简单的介绍了XML基本知识,然后从XML应用入手总结了四种现今最常见的XML的解析方法,介绍了这四种方法的特点,其中包括优点与不足之处.最后给出了一个简单的案例来对这四种解析进行代码介绍. [关键字] XML文件,DOM,SAX,JDOM,DOM4J [引言] XML即可扩展标记语言(EXtensible Markup Language),是标准通用标记语言的子集,是一种用于标记

Java读取xml文件的四种方法

xml文件: Xml代码 <?xml version="1.0" encoding="GB2312"?>   <RESULT>  <VALUE>  <NO>A1234</NO>  <ADDR>河南省郑州市</ADDR>  </VALUE>  <VALUE>  <NO>B1234</NO>  <ADDR>河南省郑州市二七区&l

精----Java读取xml文件的四种方法

xml文件: Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>河南省郑州市</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>河南省郑州市二七区</ADDR&g

Java读取xml文件的四种方法,及其取得配置文件的方法

xml文件: Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>河南省郑州市</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>河南省郑州市二七区</ADDR&g

java读取XML文件的四种方式

java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>河南省郑州市</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>河南省郑州市二七区&

C#读写txt文件的两种方法介绍 v

C#读写txt文件的两种方法介绍 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出. byte[] byData = new byte[100]; char[] charData = new char[1000]; public void Read() { try { FileStream file = new FileStream("E:\\test.txt", Fi

java读取xml文件的三种方法

xml既简单又标准,值得拥有和学习,好多地方都用的到.假设有这么一个book.xml: <?xml version="1.0" encoding="ISO-8859-1"?> <!-- Copyright w3school.com.cn --> <!-- W3School.com.cn bookstore example --> -<bookstore> -<book category="childre

golang操作文件的四种方法

golang追加内容到文件末尾 字数349 阅读54 评论0 喜欢2 golang读写文件,网上很多教程了但是今天有个需求,想要把内容追加写到文件末尾google了好久,没有查到研究了一会儿file库,终于让我找到(蒙到)了追加的办法最主要的2个函数: func (f *File) Seek(offset int64, whence int) (ret int64, err error)func (f *File) WriteAt(b []byte, off int64) (n int, err

XML解析的四种方法 建议使用demo4j解析 测试可以用

https://www.cnblogs.com/longqingyang/p/5577937.html 4.DOM4J解析  特征: 1.JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能. 2.它使用接口和抽象基本类方法. 3.具有性能优异.灵活性好.功能强大和极端易用的特点. 4.是一个开放源码的文件 以下是解析代码: public class DOM4JTest { private static ArrayList<Book> bookList = new ArrayLis