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. 数据的软删除-管理员的CRUD

    数据的“软删除”---把数据真正删除在某些时候会有问题.IsDeleted字段,false表示不删除,而是让用户可以看到,true表示是软删除,用户看不到. 一个表引用另外一张表的时候一定要引用主键. ...

  2. zf-关于即将过期提示字符串的修改

    Struts2中的 addFieldError(str1,str2); 自带输出 str1= [str2] 这样子是自带输出的 但是如果 要把=[]替换掉怎么办呢 当时想的很复杂,现在知道了,其实很简 ...

  3. '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "AttentionController" nib but the view outlet was not set.'

    问题出现原因: 先创建控制器的.h与.m文件,后来创建了相应的xib文件,运行后出现这个问题. 解决办法:

  4. jaxb异常 Class has two properties of the same name username

    import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; im ...

  5. 简单 实现CombineFileInputFormat

    import java.io.DataOutput; import java.io.IOException;   import org.apache.hadoop.conf.Configuration ...

  6. 填写信息的文章区域text_area

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...

  7. EL探索

  8. 转:web_url函数学习

    web_url语法:        Int Web_url(const char *name, const char * url, <Lists of Attributes>, [EXTR ...

  9. [iOS]C语言技术视频-01-变量的定义

    下载地址: 链接: http://pan.baidu.com/s/1eQJaVwY 密码: c7j8

  10. iOS之UILabel自适应大小

    //初始化一个label self.label=[[UILabel alloc] init]; //设置自动行数与字符换行 [self.label setNumberOfLines:0]; //给la ...