simplexml 是php 处理xml 文件的一个方法,另一个是dom 处理,这里只说simplexml 。
目前php 处理xml 用的比较多,比较成熟的还是dom 。但dom 在速度和代码量上还是比较受人诟病的。

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

一,新建xml

方法1 (普通新建文件):

<?php
/**
* @author blog.anchen8.net
* @copyright 2016
*/
$fp=fopen('xmldoc.xml','w');
var_dump($fp);
$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</color> ';
$xmlContent.='</nav>'; $xmlContent.='<nav id="3">';
$xmlContent.='<name>他他他</name> ';
$xmlContent.='<color>#cccccc</color> ';
$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>你你你</name>
  <color>#ffffff</color>
 </nav> <nav id="3">
  <name>他他他</name>
  <color>#cccccc</color>
 </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

,新建节点

 $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');

将追加作为最后一个节点

,修改节点

 $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 的节点

,删除节点

删除节点用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');
}

  五,xml文档与php在同一个文件里的情况

<?php
$xmldoc = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<phplamp>
<post>
<title id="1">PHP XML处理介绍一</title>
<details>详细内容一</details>
</post>
<post>
<title id="2">PHP XML处理介绍二</title>
<details>详细内容二</details>
</post>
<post>
<title id="3">PHP XML处理介绍三</title>
<details>详细内容三</details>
</post>
</phplamp>
XML; $movies = new SimpleXMLElement($xmldoc);
foreach($movies as $key => $value) {
// 获取属性
$attr = $value->title->attributes();
echo "Id:" . $attr['id'] . "<br />";
echo "Title:" . $value->title . "<br />";
echo "Details:" . $value->details . "<br /><br />";
}
//$words = $lib->xpath("//word");
// echo $words[0]['add'].'<br/>';
echo $movies->title[0]; ?>

 输出结果:

Id:1
Title:PHP XML处理介绍一
Details:详细内容一 Id:2
Title:PHP XML处理介绍二
Details:详细内容二 Id:3
Title:PHP XML处理介绍三
Details:详细内容三

simplexml 对xml的增删改操作的更多相关文章

  1. OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)

    公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当 ...

  2. .NET下对Web.config与App.Config的增删改操作的代码

    把代码过程常用的内容做个收藏,下边代码段是关于 .NET下对Web.config与App.Config的增删改操作的代码. <?xml version="1.0" encod ...

  3. VB&XML的增删改查

    简介:XML的增删改查 开发过程中有许多后台操作XML的过程,每次需要操作时都是找很多代码来参考或者百度一下.今天决定补充下XML操作的知识,把XML操作的增删改查都写了一遍,供以后开发参考 查询: ...

  4. 对oracle里面clob字段里面xml的增删改查学习

    这段时间,我使用系统表里面有clob字段里面存放的xml信息,我们如何对xml进行增删改查操作呢,自己参考了很多也学到很多,给大家分享一下 首先我们先建测试表 CREATE TABLE EFGP_23 ...

  5. C# winform窗体设计-对数据库执行增删改操作

    对于学习数据库的人来说,数据库的增删改可谓是最基本的了(小编其实也只是一个小白=-=),这篇文章,小编将于大家讲解数据库增删改操作 在执行数据库增删改的时候主要使用的:Command 类       ...

  6. Jquery easyui开启行编辑模式增删改操作

    Jquery easyui开启行编辑模式增删改操作 Jquery easyui开启行编辑模式增删改操作先上图 Html代码: <table id="dd"> </ ...

  7. [转]Jquery easyui开启行编辑模式增删改操作

    本文转自:http://www.cnblogs.com/nyzhai/archive/2013/05/14/3077152.html Jquery easyui开启行编辑模式增删改操作先上图 Html ...

  8. [ruby on rails] 跟我学之(3)基于rails console的查增删改操作

    本章节展开对model的介绍:包括查增删改操作.紧接着上面一节<[ruby on rails] 跟我学之HelloWorld> 创建模型 使用命令创建模型 创建表post,默认自带两栏位 ...

  9. JavaScript--DOM增删改操作

    JavaScript使用DOM操作节点来进行增删改操作 <!DOCTYPE html> <html> <head> <meta charset="U ...

随机推荐

  1. usb调试

    修改文件:/home/mxy/code/v1/kernel-3.10/drivers/power/mediatek/battery_common.c //bool AutoDebug=true;//x ...

  2. hihocoder网络流一·Ford-Fulkerson算法

    网络流一·Ford-Fulkerson算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho住在P市,P市是一个很大很大的城市,所以也面临着一个大城市都会遇 ...

  3. ural1037 Memory Management

    Memory Management Time limit: 2.0 secondMemory limit: 64 MB Background Don't you know that at school ...

  4. js变量数组

    <html><head lang="en"> <meta charset="UTF-8"> <title>< ...

  5. hihoCoder 1252 Kejin Game

    2015 ACM / ICPC 北京站 D题 网络最大流 和同学讨论了一会儿,还是Xiang578机智... ... /* ************************************** ...

  6. Python3基础 使用list() 生成一个空列表

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  7. c# 添加了按钮双击事件后,再删除掉代码会提示错误

    有两种方法:.清空属性窗口中的双击事件(doubleclick )右边的内容: .单击“发生错误”提示窗口的“否”后,再双击错误列表里的错误项,此时编辑窗口跳转为xx.Designer.cs,然后注释 ...

  8. MySQL数据类型:SQL_MODE设置不容忽视

    [IT168 技术]SQL_MODE可能是比较容易让开发人员和DBA忽略的一个变量,默认为空.SQL_MODE的设置其实是比较冒险的一种设置,因为在这种设置下可以允许一些非法操作,比如可以将NULL插 ...

  9. kafka第六篇---多个进程读不齐

    问题: 4台kafka组成的集群,多余5个进程读的话,造成偏移不齐. 解决办法: 用小于4个进程执行,如果执行够快,就可以追得上

  10. css3动画-animation

    animation驱使一组css style变化到另外一组css style,它可以定义keyframes的集合,指定style的开始和结束状态,它是transition的增强. 配置animatio ...