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"");
 }

 

?

posted @ 2013-08-22 11:30  gzm2012  阅读(189)  评论(0编辑  收藏  举报