搞了几天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. redis远程连接超时

     今天在用jedis连接远程的redis时,抛出连接超时异常:connect timed out. 详细信息例如以下: Exception in thread "main" r ...

  2. MySQL启动和关闭服务命令

    MySQL启动和关闭服务命令 1.启动服务命令 net start mysql 2.关闭服务命令 net stop mysql

  3. iOS开发经验总结(下)

    四十.AFNetworking 传送 form-data 将JSON的数据,转化为NSData, 放入Request的body中. 发送到服务器就是form-data格式. 四十一.非空判断注意 BO ...

  4. BULK INSERT将CSV或TXT文件导入到SQL Server

    CSV代表逗号分隔值,有时也被称为逗号分隔的值.而 如果加载txt文件,然后文件应该有逗号分隔的值.和文件应该是这样 下面是该脚本以创建表: CREATE TABLE Employee( Id int ...

  5. ora01033 oracle正在初始化或关闭

    toad连数据库报错: ORA-01033: ORACLE initialization or shutdown in progress 解决方法: 1)开始-运行-cmd 2)命令行中输入SQLPL ...

  6. 访问权限PPP(public、private、protected、default)之成员变量、成员变量权限解析

    首先,我们需要清楚一下方法是由哪些部分构成的: [权限修饰符列表][别的修饰符列表] 返回值类型 方法名(参数列表){   方法体:} 然后我们需要知道成员变量和成员方法访问有几种情况:1.当前包同一 ...

  7. Angularjs总结(八)$ cookie和$rootscope

    AngularJS 提供了很好的 $cookie 和 $cookieStore API 用来处理 cookies .这两个服务都能够很好的发挥HTML5 cookies,当HTML5 API可用时浏览 ...

  8. C++学习笔记3—对话框

    1.模态对话框 CTipDlg tipDlg; INT_PTR nResponse = tipDlg.DoModal(); if(nResponse == IDCANCEL) {  return; } ...

  9. xpath选择器

    一.xpath中节点关系 父(Parent):每个元素以及属性都有一个父 子(Children):元素节点可有零个.一个或多个子 同胞(Sibling):拥有相同的父的节点 先辈(Ancestor): ...

  10. 零基础Visual Fox Pro 6.0自学笔记(VFP6.0图文教程)

    序:有个哥们读大一,学的金融,由于考试需要去学VFP.拜托我帮忙找教程,发觉网上没有合适的,教学视频多半要收费,优秀文档很少.微软官方也不重视VFP了,真可惜.遂生出写一个入门教程的想法.图文并茂的可 ...