• simplexml 对xml的增删改操纵


    Firefox搭配Firebug在web法度设计中,可谓是“双剑合壁”,功能强大,本文只是拔取了此中的一些技能予以介绍,更多的请参考Firebug官方网站的介绍。

    既然人生,具有一切乐趣的全部人生,在我面前敞开来,又何必在这个狭小的,闭塞的柜子里斗争和劳作呢??

    一个老婆没有办法把丈夫拴在身边,那是做女人的失败。???? 搞了几天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"");
     }
    
     

    ?

  • 相关阅读:
    GitLab基本用法
    SSH免密登录详解
    一文搞懂GitLab安装部署及服务配置
    初识:LevelDB
    Jenkins安装与Gitlab项目部署详解
    CentOS7的安装和配置
    C/C++语言的学习方向
    C语言atoi函数
    C语言整数的取值范围
    C语言scanf函数
  • 原文地址:https://www.cnblogs.com/gzmg/p/3274476.html
Copyright © 2020-2023  润新知