top
元旦节到了,元旦节快乐...

固定当前背景  反馈、咨询、建议、留言等,请点这里[Alt+G]

本栏相关
其他文章
PHPHypertext Preprocessor当前位置:首页 >>开发技巧>>PHP
利用PHP的simplexml函数对xml文件进行增删改写操作
编辑yang 发布时间2014-09-17 浏览量12238 来源网络转载 特大
摘要:​simplexml 是php 处理xml 文件的一个方法,另一个是dom 处理,这里只说simplexml 。

       今天做站要用到xml,所以在网上看到一篇好文,特转载过来(出处:u_cz
       simplexml 是php 处理xml 文件的一个方法,另一个是dom 处理,这里只说simplexml 。
       目前php 处理xml 用的比较多,比较成熟的还是dom 。但dom 在速度和代码量上还是比较受人诟病的。

       simplexml 的有些函数需要比较高版本的php ,建议是php5.2 以上。

一、新建xml文件的两种方法:

1、普通文件方法

$xmlContent='<?xml version="1.0" encoding="utf-8" ?> ';
$xmlContent.='<navlist>';
$xmlContent.='<nav id="1">';
$xmlContent.='<name>测试1</name> ';
$xmlContent.='<color>#000000</ncolor> ';
$xmlContent.='</nav>';
$xmlContent.='<nav id="2">';
$xmlContent.='<name>测试2</name> ';
$xmlContent.='<color>#ffffff</ncolor> ';
$xmlContent.='</nav>';
$xmlContent.='<nav id="3">';
$xmlContent.='<name>测试3</name> ';
$xmlContent.='<ncolor>#cccccc</ncolor> ';
$xmlContent.='</nav>';
$xmlContent.='</navlist>';
file_put_contents('mytest.xml',$xmlContent);

2、使用simplexml 新建

$xmlContent='<?xml version="1.0" encoding="utf-8" ?><navlist></navlist>';
file_put_contents('mytest.xml',$xmlContent);
$xml=simplexml_load_file('mytest.xml');
$app=$xml->addChild('nav');
$app->addAttribute('id',"1");
$app->addChild('name','测试1');
$app->addChild('color','#000000');
$app=$xml->addChild('nav');
$app->addAttribute('id',"2");
$app->addChild('name','测试2');
$app->addChild('color','#ffffff);
$app=$xml->addChild('nav');
$app->addAttribute('id',"3");
$app->addChild('name','测试3');
$app->addChild('color','#cccccc);
$xml->asXML('mytest.xml');

       可以看到第一种方法其实只是普通的写入文件,第二种方法才是使用simplexml 新建xml 文件,但为什么我要把第一种普通方法放前面呢?因为本人测试了一下两种方法的运行时间,发现第一种方法使用的时间更少,所以建议使用普通的新建文件方法新建xml 文件就行了!

新建的文件结构如下:

<?xml version="1.0" encoding="utf-8"?>
<navlist>
 <nav id="1">
  <name>测试1</name>
  <color>#000000</ncolor>
 </nav>
 <nav id="2">
  <name>测试2</name>
  <color>#ffffff</ncolor>
 </nav>
 <nav id="3">
  <name>测试3</name>
  <color>#cccccc</ncolor>
 </nav>
</navlist>

二、读取xml

if($xml=simplexml_load_file('mytest.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('mytest.xml');
$app=$xml->addChild('nav');
$app->addAttribute('id',"4");
$app->addChild('name','测试4');
$app->addChild('color','#000000');
$xml->asXML(mytest.xml');

       将追加作为最后一个节点

2、修改节点

$xml=simplexml_load_file('mytest.xml');
 $xg=$xml->xpath("/navlist/nav[@id=‘3’]");
 $xg[0]->name="测试3修改";
 $xg[0]->color="#444444";
 $xml->asXML(mytest.xml');

       修改了nav 属性id 为3 的节点

3、删除节点

       删除节点用unset 函数就行,但要删除指定节点比较麻烦,删除指定节点只能使用节点的索引值。

       比如删除第二个节点(id 为2 的) :

$xml=simplexml_load_file('mytest.xml');
unset($xml->nav[1]);
$xml->asXML(mytest.xml');

       索引从0 开始,所以第二个节点的索引是1 。

       如果想通过指定的属性删除,则需要循环所有节点获取指定属性的节点索引
       如下:

$xml=simplexml_load_file('mytest.xml');
$i=0;
 foreach($xml as $dup){
  $sc=$dup->attributes();
  if($sc['id']==2){
   unset($xml->nav[$i]);
  }
  $i++;
 }
$xml->asXML('mytest.xml');

四、删除xml文件

if(file_exists('mytest.xml')){
    unlink('mytest.xml');
 }

       看完后,相信您已经对xml的操作已经有所了解,加油吧。

标签  技巧网页制作网站开发

按键盘左右方向键可快速浏览上一篇(←)、下一篇(→)


反馈/咨询/建议/留言(GuestBook)
您好,怎么称呼您!
您的姓名:
上一步:鼠标向上滚动/左方向键(←)
下一步或完成:鼠标向下滚动/Tab键/右方向键(→)
如果您有空的话,可以填一下您的相关信息!
您的电话:
您的邮箱:
现在,请填写您想要了解的信息!
信息内容:
验证码: 看不清?点图片刷新