一,新建xml
办法1 (通俗新建文件):
$fp=fopen("111.xml"","w"); $xmlContent="<?xml version="1.0" encoding="utf-8" ?>"; $xmlContent.="<navlist>"; $xmlContent.="<nav id="1">"; $xmlContent.="<name>我我我</name> "; $xmlContent.="<color>#000000</color> "; $xmlContent.="</nav>"; $xmlContent.="<nav id="2">"; $xmlContent.="<name>你你你</name>"; $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"); }