详解SimpleXML添加_修改_删除_遍历XML节点属性

SimpleXML概述

要处理XML 文件,有两种传统的处理思路:SAX 和DOM。SAX 基于事件触发机制,对XML 文件进行一次扫描,完成要进行的处理;DOM 则将整个XML 文件构造为一棵DOM树,通过对DOM 树的遍历完成处理。这两种方法各有优缺点,SAX 的处理思路相对抽象,DOM 的处理过程相对烦琐,都不很适合新手的入门。

PHP5 推出了一套新的XML 处理函数,即SimpleXML。名如其实,SimpleXML 本身小巧精干,只提供了少量的几个方法函数,但用它处理起XML 文件功能却非常强大,操作也非常的简单。

首先,它提供有简单的函数可以从XML 文档、字符串、或DOM 对象上直接构造出SimpleXMLElement 对象;其次,SimpleXMLElement 提供有简单的方法可以进行属性、子节点、和XPath 的操作;然而,SimpleXML 最简单的地方是,它提供有使用标准对象的属性和对象迭代器进行节点操作的方法,这一处理思路使得用PHP 对XML 文档的处理得到了极大的简化。

SimpleXML操作简要总结

simplexml_load_file()  从 XML 文档获取 SimpleXMLElement 对象。  5

simplexml_load_string()  从 XML 字符串获取 SimpleXMLElement 对象。

simplexml_import_dom()  把 DOM 节点转换为 SimpleXMLElement 对象。

(以上3个加载函数返回SimpleXMLElement对象,其路径在根标记上)

addAttribute()  给 SimpleXML 元素添加一个属性。

addChild()  给 SimpleXML 元素添加一个子元素。

asXML()  从 SimpleXML 元素获取 XML 字符串。

attributes()  获取 SimpleXML 元素的属性。

children()  获取指定节点的子。

getName()  获取 SimpleXML 元素的名称。

xpath()  对 XML 数据运行 XPath 查询。

$xml->$key=$value;  修改指定标签的值

$xml->$key->attributes()->属性id=$attr;   修改属性的值

unset($xml->$key);   删除标签行

SimpleXML应用案例一:

$string = <<<XML

<a>

<foo name="one" game="lonely">1</foo>

<foo name="one" game="lonely">1</foo>

</a>

XML;

$xml = simplexml_load_string($string);

//显示xml属性,var_dump()、print_r不能够显示节点属性值

foreach($xml->foo[0]->attributes() as $a => $b) {

echo $a,‘="‘,$b,"\"\n";

}

///给 SimpleXML 元素添加属性

$xml->addAttribute("type","html");

$xml->addAttribute("name","top");

$xml->foo[1]->addAttribute("other","ok");

var_dump($xml->foo[1]->attributes());

//向指定的 XML 节点添加一个子节点

$xml->addChild("data","2014.5.26");

var_dump($xml);

echo "<hr/>";

//把SimpleXMLElement对象返回可写入文件的文本字符串

print($xml->asXML());

SimpleXML应用案例二:

$string2=<<<XML

<note>

<to dd="等等">George</to>

<from nn="bb">John</from>

<heading>Reminder</heading>

<body>Don‘t forget the meeting!</body>

<a>

<b>

<c>text</c>

<c>stuff</c>

</b>

<d>

<c>code</c>

</d>

</a>

</note>

XML;

$xml2 = simplexml_load_string($string2);

// 遍历子节点的属性名和值

foreach ($xml2->children()as $child)

{

foreach($child->attributes() as $a => $b){

echo "<br/>".$child.":".$a."==".$b;

}

}

//遍历子节点之下的标签名和值

foreach($xml2->children() as $a=>$b){

echo "<br/>".$a."---".$b;

}

echo "<hr/>";

//只获取元素名称

foreach($xml2->children() as $ch){

echo "<br/>".$ch->getName();

}

echo "<hr/>";

//使用路径定位节点

$mynode=$xml2->xpath("/note/a/b");

var_dump($mynode);

asXML()SimpleXML对象文本化并保存XML文件:

$file = fopen($url,"w");

fwrite($file,$xml->asXML());

fclose($file);

一个SimpleXML封装类:

class SimpleXML{

public $data="";

//从 XML 文档获取 SimpleXMLElement 对象

public function xml_simplexml_load_file($url){

if (file_exists($url)) {

$this->data=simplexml_load_file($url);

}else{

exit($url."<br/>文件不存在!");

}

}

// 从 XML 字符串获取 SimpleXMLElement 对象

public function xml_simplexml_load_string($xml_string){

$this->data=simplexml_load_string($xml_string);

}

//把 DOM 节点转换为 SimpleXMLElement 对象

public function xml_simplexml_import_dom($dom){

$this->data=simplexml_import_dom($dom);

}

// 给 SimpleXML 元素添加一个子元素

public function xml_addchild($simplexml,$name,$value){

$simplexml->addChild($name,$value);

}

// 给 SimpleXML 元素添加一个属性

public function xml_addattribute($simplexml,$name,$value){

$simplexml->addAttribute($name,$value);

}

//返回 SimpleXML 元素获取 XML 字符串

public function xml_asxml($simplexml){

return $simplexml->asXML();

}

//返回获取 SimpleXML 元素的属性

public function xml_attributes($simplexml){

return $simplexml->attributes();

}

//打印 SimpleXML 元素的属性

public function xml_attributes_show($simplexml){

foreach ($simplexml->attributes() as $a=>$b){

print($a."=".$b."<br/>");

}

}

//返回指定节点的子节点SimpleXML

public function xml_getchildren($simplexml){

return $simplexml->children();

}

//返回 SimpleXML 元素的名称

public function xml_getname($simplexml){

return $simplexml->getName();

}

//返回指定路径的SimpleXML

public function xml_getxpath($simplexml,$path_str){

return $simplexml->xpath($path_str);

}

//返回以标签名为键值,某一属性为值的数组

public function xml_getattributes_arr($attr_name){

$re_arr=array();

foreach ($this->data as $d){

foreach($d->attributes() as $a=>$b){

if($a==$attr_name)

$re_arr[$this->xml_getname($d)]=$b;

}

}

return $re_arr;

}

//检查是否存在重复的key

public function xml_rekey($key){

$re_bool=false;

foreach($this->data as $d){

if($this->xml_getname($d)==$key){

$re_bool=true;

}

}

return $re_bool;

}

//追加节点

public function xml_add($key,$value,$attr){

$this->data->addChild($key,$value);

$this->data->$key->addAttribute("nicheng",$attr);

}

//保存xml

public function xml_save($url){

$save_xml=$this->data->asXML();

$file = fopen($url,"w");

fwrite($file,$save_xml);

fclose($file);

}

//修改XML元素

public function xml_update($key,$value,$attr){

$this->data->$key=$value;

$this->data->$key->attributes()->nicheng=$attr;

}

//删除XML元素

public function xml_delete($key){

unset($this->data->$key);

}

}

时间: 2024-08-08 03:10:04

详解SimpleXML添加_修改_删除_遍历XML节点属性的相关文章

JAVA 添加、修改和删除PDF书签

当阅读篇幅较长的PDF文档时,为方便我们再次阅读时快速定位到上一次的阅读位置,可以插入一个书签进行标记:此外,对于文档中已有的书签,我们也可以根据需要进行修改或者删除等操作.本篇文章将通过Java编程来展示如何添加.修改以及删除PDF书签. 工具使用: ? Free Spire.Pdf for Java 2.4.4 (免费版)? IntelliJ IDEA Jar包导入: 方式一:首先,从官网获取Free Spire.PDF for Java之后解压,以下是三种在IDEA中快速打开Project

Jquery EasyUI的添加,修改,删除,查询等基本操作介绍

http://www.jb51.net/article/42016.htm 初识Jquery EasyUI看了一些博主用其开发出来的项目,页面很炫,感觉功能挺强大,效果也挺不错,最近一直想系统学习一套前台控件,于是在网上找了一些参考示例.写了一些基本的增删改查功能,算是对该控件的基本入门.后续有时间继续深入学习. 在学习jquery easyui前应该先到官网下载最新版本http://www.jeasyui.com/download/index.php 先看一下运行后的页面 1.列表展示 2.新

datagrid 添加、修改、删除(转载)

原链接:JQueryEasyUI学习笔记(十)datagrid 添加.修改.删除 基于datagrid框架的删除.添加与修改: 主要是批量删除,双击表单修改.选中行修改,增加行修改,再有就是扩展editor的方法,无需废话,直接上代码,代码中的注释写的很详细: <script type="text/javascript" charst="utf-8">var editFlag = undefined;//设置一个编辑标记 //因为layout框架指向hr

JQueryEasyUI学习之datagrid 添加、修改、删除

JQueryEasyUI学习之datagrid 添加.修改.删除 实现EasyUI中DataGrid单个表格的编辑

C# 添加,修改,删除Xml节点 摘录

http://blog.csdn.net/zth603/article/details/5743880 C# 添加,修改,删除Xml节点 //添加xml节点    private void AddXml(string image, string title)     {        XmlDocument xmlDoc = new XmlDocument();        xmlDoc.Load(Server.MapPath("../flash/dati.xml")); XmlNo

myBatis批量添加,修改和删除

摘自: http://blog.csdn.net/myjlvzlp/article/details/8434376 1.批量添加元素session.insert(String string,Object o) public void batchInsertStudent(){ List<Student> ls = new ArrayList<Student>(); for(int i = 5;i < 8;i++){ Student student = new Student(

MVC5 网站开发之八 栏目功能 添加、修改和删除

本次实现栏目的浏览.添加.修改和删除. 栏目一共有三种类型. 常规栏目-可以添加子栏目,也可以添加内容模型.当不选择内容模型时,不能添加内容. 单页栏目-栏目只有一个页面,可以设置视图. 链接栏目-栏目为一个链接,点击后转到相应链接. 在视图中原本栏目的树形显示插件使用Bootstrap TreeView 1.2.0(MVC5 网站开发之六 管理员 2.添加.删除.重置密码.修改密码.列表浏览),后来使用中发现zTree使用起来更习惯,所以更换成zTree了. 目录 MVC5网站开发之一 总体概

php+mysqli预处理技术实现添加、修改及删除多条数据的方法

本文实例讲述了php+mysqli预处理技术实现添加.修改及删除多条数据的方法.分享给大家供大家参考.具体分析如下: 首先来说说为什么要有预处理(预编译)技术?举个例子:假设要向数据库添加100个用户,按常规思路,就是向数据库发送100个执行请求,此时,按照 mysql 数据库的工作原理,它需要对每一条执行语句进行编译(这里就有100次).所以,这里的效率是非常低的. 预处理(预编译)技术的作用,就是减少编译的次数和时间,以提高效果.通过一个案例来说明,预处理(预编译)技术是如何做到的(好吧,先

Quartz 2.2 动态添加、修改和删除定时任务

QuartzManager.Java 动态添加.修改和删除定时任务管理类 import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org.quartz.Job; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.JobKey; import org.quartz.Scheduler; import