PHP怎么读写XML?(四种方法)

一、总结

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

二、PHP怎么读写XML?(四种方法)

零、数据及需求说明

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

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

MySQL中的数据:

XML文件:

<?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文件:

<?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文件:

<?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文件:

<?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 '<pre>';
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 '<pre>';
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"?><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文件:

<?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则是属于基于流的解析器,它不会一次把整个文档加载到内存中,而是每次分别读取其中的一个节点并允许实时与之交互,这种方式效率高,而且占内存少。

三、测试题-简答题

1、php中的preg_match_all函数的作用是什么?

解答:preg_match_all — 执行一个全局正则表达式匹配。

2、php函数中参数中的 string $pattern 在正则相关函数中是什么意思?

解答:pattern是模式的意思,在正则相关函数中表现为正则字符串,也就是正则模式。

3、php中preg_match_all函数最主要的参数有哪几个?

解答:pattern要搜索的模式,字符串形式。 subject输入字符串。matches多维数组,作为输出参数输出所有匹配结果。

4、php中preg_match_all函数是全局匹配么?

解答:是。preg_match_all — 执行一个全局正则表达式匹配。

5、php中的explode函数的作用是什么?

解答:explode — 使用一个字符串分割另一个字符串

6、php中的explode函数的常用参数是什么?

解答:delimiter边界上的分隔字符。string输入的字符串。

7、php中的substr函数的作用是什么?

解答:substr — 返回字符串的子串

8、php中的substr函数如何使用(参数和返回值)?

解答:string substr ( string $string , int $start [, int $length ] )

9、php中正则表达式和js中的正则表达式的区别是什么?

解答:除了没有gim三个配置参数,其它全部相同。preg_match_all("/<".$x.">.*<\/".$x.">/", $con, $temp); 这里有拼接字符串。

10、php中字符串读取xml的方式是什么?

解答:直接用正则把某个标签对应的数据全部弄到一个数组,全部标签对应的数据就变成了二维数据。

11、$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6"; $pieces = explode(" ", $pizza); 问$pieces的值是什么?

解答:一个一维数组,值依次为piece1 等。

12、$data = "foo:*:1023:1000::/home/foo:/bin/sh"; list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data); $user的值是什么?

解答:echo $user; // foo;  echo $pass; // *

13、$rest = substr("abcdef", -3, 1);的返回值是什么?

解答:返回 "d"

14、echo substr('abcdef', 0, 4);的返回值是什么?

解答:abcd

转载于:https://www.cnblogs.com/Renyi-Fan/p/9112945.html

PHP怎么读写XML?(四种方法)相关推荐

  1. 详解Java解析XML的四种方法

    http://developer.51cto.com  2009-03-31 13:12  cnlw1985  javaeye  我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...

  2. python 读写16bit图像的四种方法

    python 读写16bit图像的四种方法 应对超高清.HDR等图像增强类深度学习任务和专业图片处理任务时,我们需要对16bit图像进行读取.转tensor和保存等操作,这里总结出四种python实现 ...

  3. 使用Spring Security3的四种方法概述

    使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过, ...

  4. 【框架学习】XML四种解析方案

    目前比较有名的 xml解析方式有: (1).DOM (2).SAX (3).JDOM (4).DOM4J 一.DOM解析 DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次 ...

  5. svg鼠标响应事件的四种方法(其中两种可支持火狐)

    svg鼠标响应事件的四种方法 鼠标响应事件的四种方法,以click事件为例. Mouse Events - SMIL <?xml version="1.0" encoding ...

  6. (转).NET导出Excel的四种方法及评测

    .NET导出Excel的四种方法及评测 导出Excel是.NET的常见需求,开源社区.市场上,都提供了不少各式各样的Excel操作相关包.本文,我将使用NPOI.EPPlus.OpenXML.Aspo ...

  7. linux下配置ip地址四种方法(图文)

    配置ip地址四种方法 (1)Ifconfig命令 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:o ...

  8. IOS中Json解析的四种方法

    2019独角兽企业重金招聘Python工程师标准>>> 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此& ...

  9. 【转】IOS中Json解析的四种方法

    原文网址:http://blog.csdn.net/enuola/article/details/7903632 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有 ...

最新文章

  1. Spring Cloud Alibaba基础教程:使用Sentinel实现接口限流
  2. 大数据技术Hbase 和 Hive 详解
  3. python 写xml_使用python 写xml文件
  4. IDC:2016年第四季度全球企业存储市场出现下滑
  5. os.path.join;os.makedirs()
  6. 【BZOJ 1026】 [SCOI2009]windy数
  7. 不用编写客户端调试WebServices
  8. tomcat+mysql+腾讯云_腾讯云服务器配置tomcat和mysql
  9. 阿里工程师的1心1役!带你看遍“五彩斑斓的黑科技”
  10. canonical的概念用途及用法详细解说,seo不可不看!
  11. 容器化一个简单的 Mern stack app
  12. 说话技巧:成为谈话高手必不可少的十个特点
  13. 2021 408计算机学科专业基础综合真题及答案(2009-2020)
  14. Java唐诗学习系统
  15. Python基础学习第八天
  16. 全栈合一:万物互联下的智能安全运维
  17. GreenPlum7/PG12中如何添加一个自定义内置函数
  18. 医疗器械电磁兼容检测不通过,需要EMC整改
  19. 避免摄像机穿透地形模型
  20. vue 传递数组后端java接收问题(qs和json)

热门文章

  1. 全球及中国自媒体行业营销模式及应用规模前景分析报告2021-2027年
  2. 按不同vlan下发dhcp_电脑网络:交换机VLAN基础知识及基本划分方法,揭开VLAN的面纱...
  3. 纯css实现移动端横向滑动列表
  4. 前端学习笔记2017.6.21-引入JS文件的方法
  5. 201521123031 《Java程序设计》第6周学习总结
  6. easyui radio 取值和赋值
  7. Intent.FLAG_ACTIVITY_CLEAR_TOP 的使用注意
  8. 如何挽回一个快要“变心”的买家?(转自索菲外贸笔记)
  9. 15年资深产品经理判官:怎样搭建完整的产品矩阵
  10. 硅谷增长的新指标——超级用户微笑曲线