搞了几天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');
 }

simplexml 使用实例的更多相关文章

  1. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  2. php微信接口实例

    <?php /** * wechat php test */ //define your token //定义TOKEN秘钥 define("TOKEN", "we ...

  3. 使用SimpleXML应该注意的问题有哪些?

    SimpleXML提供了一套简单快速的XML操作方法,大大地提高了XML操作的效率. 但是有时不小心也会带来不小的麻烦,看下面一段代码: $xml=simplexml_load_string('< ...

  4. HP SimpleXML

    PHP SimpleXML PHP SimpleXML 处理最普通的 XML 任务,其余的任务则交由其它扩展处理. 什么是 PHP SimpleXML? SimpleXML 是 PHP 5 中的新特性 ...

  5. SimpleXML 使用详细例子

    要处理XML 文件,有两种传统的处理思路:SAX 和DOM.SAX 基于事件触发机制, 对XML 文件进行一次扫描,完成要进行的处理:DOM 则将整个XML 文件构造为一棵DOM 树,通过对DOM 树 ...

  6. PHP XML SimpleXML

    PHP 可以基于 SimpleXML 生成和解析 xml 的方法,通过本节的实例,你将了解 PHP 是如何使用 SimpleXML 生成及解析 xml 格式数据的. PHP SimpleXML 处理最 ...

  7. **PHP SimpleXML 使用详细例子

    要处理XML 文件,有两种传统的处理思路:SAX 和DOM.SAX 基于事件触发机制, 对XML 文件进行一次扫描,完成要进行的处理:DOM 则将整个XML 文件构造为一棵DOM 树,通过对DOM 树 ...

  8. XMLREADER/DOM/SIMPLEXML 解析大文件

    DOM和simplexml处理xml非常的灵活方便,它们的内存组织结构与xml文件格式很相近.但是同时它们也有一个缺点,对于大文件处理起来力不从心,太耗内存了. 还好有xmlreader,基于流的解析 ...

  9. PHP 微信机器人 Vbot 结合 Laravel 基础入门及实例

    新来了项目,需要能监听指定微信群的消息并进行转发.基于 PHP 7 的 web 微信机器人 Vbot 可以满足需求.Vbot 本质上就是实现了登录网页版微信来进行自动回复.群管理等等操作. githu ...

随机推荐

  1. 中文乱码 jsp正常后台接收异常

    关于中文乱码:1,解决GET方式中的中文编码问题. 在Jsp中如果用中文方式传递编码,一定要保证传递过去的是U8:情况一:在便签中<s:action > 可以使用<s:param&g ...

  2. 使用freemarker生成html

    http://herryhaixiao.iteye.com/blog/677524 由于freemarker这个技术很久很久就有了,注释我就没写得很详细了,相信大家都看得懂.下面就直接上代码以及一些代 ...

  3. jQuery EasyUI, datagrid, treegrid formatter 参数比较 row index

    如题: datagrid中,见官方文档: formatter function The cell formatter function, take three parameter:value: the ...

  4. JAVA自动生成正则表达式工具类

    经过很久的努力,终于完成了JAVA自动生成正则表达式工具类.还记得之前需要正则,老是从网上找吗?找了想修改也不会修改.现在不用再为此烦恼了,使用此生成类轻松搞定所有正则表达式.赶快在同事面前炫一下吧. ...

  5. 在Spring中使用JDK定时器实现调度任务

    在Spring中使用JDK定时器实现调度任务 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs 本文探讨Spring如何集成JDK的Timer定时器,实现 ...

  6. LINUX系统镜像下载总汇

    LINUX系统fedora.centos.debian.ubuntu ISO下载汇总 http://mirrors.sohu.com http://linux.ilvgo.cn/ ftp://gent ...

  7. Python重写C语言程序100例--Part1

    ''' [程序1] 题目:有1.2.3.4个数字,能组成多少个互不同样且无反复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成全部的排列后再去 掉不满足条件 ...

  8. linuxcon-europe 2015 linux大会

    http://events.linuxfoundation.org/events/archive/2015/linuxcon-europe

  9. TimePicker 和TimePickerDiag

    先建立以个xml,然后拖拽TimerPicker; TimePicker和TimePickerDiag TimerPicker : 先建立xml文件,然后拖拽TimePicker然后在MainActi ...

  10. JVM笔记5:Class文件结构

    Class文件是一组以8位字节为基础单位的二进制流,包含多个数据项目(数据项目的顺序,占用的字节数均由规范定义),各个数据项目严格按照顺序紧凑的排列在Class文件中,不包含任何分隔符,使得整个Cla ...