搞了几天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. javabean以及内省技术详解(转)

    一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 ...

  2. 百亿级别数据量,又需要秒级响应的案例,需要什么系统支持呢?下面介绍下大数据实时分析工具Yonghong Z-Suite

    Yonghong Z-Suite 除了提供优秀的前端BI工具之外,Yonghong Z-Suite让用户可以选购分布式数据集市来支持实时大数据分析. 对于这种百亿级的大数据案例,Yonghong Z- ...

  3. 多平台响应键盘事件!(适用于Cocos2dx 3.0 alpha以上版本号)

    Hello everyone! For a week I've been looking on how to make a keyboard work! I managed to figure it ...

  4. TRUNCATE TABLE 与 DELETE table 区别

    语法 TRUNCATE TABLE name;参数  TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行. TRUNCATE TABLE ...

  5. LINUX 内核月报 taobao

    http://kernel.taobao.org/index.php?title=Monthly_Kernel_Reports

  6. android 沉浸通知栏

    IOS的沉浸式通知栏很高大上,通知栏和app统一颜色或样式,很美观.android上面也早就人实现这种效果了. 我在这边也写一个实现通知栏沉浸式的方法,目前只实现了相同颜色. 先要改布局文件xml & ...

  7. Qt全局热键(windows篇)

      Qt对于系统底层,一直没有很好的支持,例如串口并口通信,还有我们经常都会用到的全局热键,等等.既然Qt可能出于某种原因,不对这些进行支持,我们就只能自己写代码,调用系统相关的API了. 注意,这个 ...

  8. Java基础知识强化之IO流笔记52:IO流练习之 把一个文件中的字符串排序后再写入另一个文件案例

    1. 把一个文件中的字符串排序后再写入另一个文件 已知s.txt文件中有这样的一个字符串:"hcexfgijkamdnoqrzstuvwybpl" 请编写程序读取数据内容,把数据排 ...

  9. 深入理解计算机系统第二版习题解答CSAPP 2.3

    填写空白.单字节可以用两个十六进制数表示. 十进制 二进制 十六进制 0 0000 0000 0x00 167 1010 0111 0xA7 62 0011 1110 0x3E 188 1011 11 ...

  10. Learning Django Resources

    Learning Django Django makes it easier to build better Web apps more quickly and with less code. Web ...