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);
}
}
制作人:飞虎 无兄弟不编程!
SimpleXML概述的更多相关文章
- 详解SimpleXML添加_修改_删除_遍历XML节点属性
SimpleXML概述 要处理XML 文件,有两种传统的处理思路:SAX 和DOM.SAX 基于事件触发机制,对XML 文件进行一次扫描,完成要进行的处理:DOM 则将整个XML 文件构造为一棵DOM ...
- PHP - 概述
第1章 PHP概述 学习要点: 1.PHP基础知识 2.PHP的环境配置 3.安装三款主流程序 4.PHP开发工具的选择 5.一个简单的示例 一.PHP基础知识 PHP PHP是一种目前最流行的服务端 ...
- 【AR实验室】ARToolKit之概述篇
0x00 - 前言 我从去年就开始对AR(Augmented Reality)技术比较关注,但是去年AR行业一直处于偶尔发声的状态,丝毫没有其"异姓同名"的兄弟VR(Virtual ...
- Recurrent Neural Network系列1--RNN(循环神经网络)概述
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- .Net 大型分布式基础服务架构横向演变概述
一. 业务背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 二. 基础 ...
- [C#] 进阶 - LINQ 标准查询操作概述
LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...
- PHP中遍历XML之SimpleXML
简单来讲述一些XML吧,XML是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言.XML是当今用于传输数据的两大工具之一,另外一个是json. 我们在PHP中使用XML也是用来传输数据, ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
随机推荐
- 小知识,用myeclipes找jar
有些时候,换台电脑就换了一个框架的版本,找对应的jar是一件非常麻烦的事. 我们可以使用myeclipes快速得到我们想要的jar 首先新建一个项目,然后使用myeclipes的自动生成框架技术,生成 ...
- css 兼容 各类手机的写法 待续
@media (device-height:480px) and (-webkit-min-device-pixel-ratio:2){/* 兼容iphone4/4s */ .class{} } @m ...
- KBMMW 的日志管理器
kbmmw 4.82 最大的新特性就是增加了 日志管理器. 新的日志管理器实现了不同类型的日志.断言.异常处理.计时等功能. 首先.引用kbmMWLog.pas 单元后,系统就默认生成一个IkbmMW ...
- SWIFT推送之本地推送(UILocalNotification)之二带按钮的消息
上一篇讲到的本地推送是普通的消息推送,本篇要讲一下带按钮动作的推送消息,先上个图瞅瞅: 继上一篇的内容进行小小的改动: 在didFinishLaunchingWithOptions方法内进行以下修改 ...
- struts2读取request,session,application中的值
request.----> <s:property value="#request.mySessionPropKey"/> or <s:property v ...
- caffe编译问题-nvcc fatal:Unsupported gpu architecture 'compute_20'
错误描述 nvcc fatal : Unsupported gpu architecture 'compute_20' Makefile:: recipe for target '.build_rel ...
- opencv-python教程学习系列8-opencv图像算术运算
前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像的算术运算,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 ...
- CodeForces - 140E:New Year Garland (组合数&&DP)
As Gerald, Alexander, Sergey and Gennady are already busy with the usual New Year chores, Edward has ...
- HDU 1084:What Is Your Grade?
Problem Description "Point, point, life of student!" This is a ballad(歌谣)well known in col ...
- Android GUI架构之MVC模式
1. Android UI框架 和其他Java UI框架一样,Android UI框架也是单线程和事件驱动的,采用MVC模式进行组织. 2. MVC模式 M:Model,是应用的核心,也就是应用真正想 ...