simplexml 使用实例
搞了几天php处理xml文件,终于有点头绪,记录下来分享一下。
simplexml 是php处理xml文件的一个方法,另一个是dom处理,这里只说simplexml。
目前php处理xml用的比较多,比较成熟的还是dom。但dom在速度和代码量上还是比较受人诟病的。
simplexml的有些函数需要比较高版本的php,建议是php5.2以上。
一,新建xml
方法1(普通新建文件):
$fp=fopen('111.xml','w');
$xmlContent='<?xml version="1.0" encoding="utf-8" ?> ';
$xmlContent.='<navlist>';
$xmlContent.='<nav id="1">';
$xmlContent.='<name>我我我</nname> ';
$xmlContent.='<color>#000000</ncolor> ';
$xmlContent.='</nav>';
$xmlContent.='<nav id="2">';
$xmlContent.='<name>你你你</nname> ';
$xmlContent.='<color>#ffffff</ncolor> ';
$xmlContent.='</nav>';
$xmlContent.='<nav id="3">';
$xmlContent.='<nname>他他他</nname> ';
$xmlContent.='<ncolor>#cccccc</ncolor> ';
$xmlContent.='</nav>';
$xmlContent.='</navlist>';
fwrite($fp,$xmlContent);
fclose($fp);
方法2(使用simplexml新建):
$fp=fopen(111.xml','w');
$xmlContent='<?xml version="1.0" encoding="utf-8" ?><navlist></navlist>';
fwrite($fp,$xmlContent);
fclose($fp);
$xml=simplexml_load_file('111.xml');
$app=$xml->addChild('nav');
$app->addAttribute('id',"1");
$app->addChild('name','我我我');
$app->addChild('color','#000000');
$app=$xml->addChild('nav');
$app->addAttribute('id',"2");
$app->addChild('name','你你你');
$app->addChild('color','#ffffff);
$app=$xml->addChild('nav');
$app->addAttribute('id',"3");
$app->addChild('name','他他他');
$app->addChild('color','#cccccc);
$xml->asXML('111.xml');
可以看到第一种方法其实只是普通的写入文件,第二种方法才是使用simplexml新建xml文件,但为什么我要把第一种普通方法放前面呢?因为本人测试了一下两种方法的运行时间,发现第一种方法使用的时间更少,所以建议使用普通的新建文件方法新建xml文件就行了!
新建的文件结构如下:
<?xml version="1.0" encoding="utf-8"?>
<navlist>
<nav id="1">
<name>我我我</nname>
<color>#000000</ncolor>
</nav>
<nav id="2">
<name>你你你</nname>
<color>#ffffff</ncolor>
</nav>
<nav id="3">
<name>他他他</nname>
<color>#cccccc</ncolor>
</nav>
</navlist>
二,读取xml
if($xml=simplexml_load_file('111.xml')){
foreach($xml->nav as $list){
$value[]=get_object_vars($list);
}
}else{
echo('load xml error!');
}
get_object_vars函数是把对象转化为数组,这样$value就是一个Php的普通数组了,大家可以print_r一下这个数组,Php数组的读取就不用我说了吧。
三,修改xml
1,新建节点
$xml=simplexml_load_file('111.xml');
$app=$xml->addChild('nav');
$app->addAttribute('id',"4");
$app->addChild('name','它它它');
$app->addChild('color','#000000');
$xml->asXML(111.xml');
将追加作为最后一个节点
2,修改节点
$xml=simplexml_load_file('111.xml');
$xg=$xml->xpath("/navlist/nav[@id=‘3’]");
$xg[0]->name="他啊他啊";
$xg[0]->color="#444444";
$xml->asXML(111.xml');
修改了nav属性id为3的节点
3,删除节点
删除节点用unset函数就行,但要删除指定节点比较麻烦,删除指定节点只能使用节点的索引值。
比如删除第二个节点(id为2的):
$xml=simplexml_load_file('111.xml');
unset($xml->nav[1]);
$xml->asXML(111.xml');
索引从0开始,所以第二个节点的索引是1。
如果想通过指定的属性删除,则需要循环所有节点获取指定属性的节点索引
如下:
$xml=simplexml_load_file('111.xml');
$i=0;
foreach($xml as $dup){
$sc=$dup->attributes();
if($sc['id']==2){
unset($xml->nav[$i]);
}
$i++;
}
$xml->asXML('111.xml');
四,删除xml
if(file_exists('111.xml')){
unlink('111.xml');
}
最新文章
- [工具类]DataTable与泛型集合List互转
- js中鼠标滚轮事件详解
- POJ 1258 Agri-Net
- ACM——01排序
- OpenCV学习笔记:如何扫描图像、利用查找表和计时
- Android 中使用MediaRecorder进行录像详解(视频录制)
- php命令执行脚本
- Dynamic Web Module 3.0 requires Java 1.6 or newer.的解决
- <;一>;企业级开源仓库nexus实战应用–nexus的安装
- Huginn定时时间不准确或延后问题
- python之路(三)-深浅拷贝
- 输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m
- springboot2.0+dubbo整合分布式服务发布和调用
- photoshop怎么旋转图片
- Notepad++ 中如何将代码格式化
- OpenID Connect Core 1.0(七)使用混合流验证
- fiddler启动报错Unable to bind to port [8888],ErrorCode:10106
- robot自动化分层设计
- jquery源码解析:pushStack,end,ready,eq详解
- jquery计算器(改良版)
热门文章
- 3D案例,导航,导航升级版
- 在DDMS中访问data目录
- java和c#md5加密不同
- Delphi调用C++写的dll示例
- RHCA学习笔记:RH442-Unit9内核定时与进程延时
- MYSQL在线注释文档--- 在gdb中显示源码(gdbtui使用方法)----赖明星的个人博客
- Android(java)学习笔记146:Bundle和Intent类使用和交互
- java not enough memory error.
- 微信公众号支付(三):页面调用微信支付JS并完成支付
- MyBatis自动获取主键,MyBatis使用Oracle返回主键,Oracle获取主键