要处理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概述的更多相关文章

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

    SimpleXML概述 要处理XML 文件,有两种传统的处理思路:SAX 和DOM.SAX 基于事件触发机制,对XML 文件进行一次扫描,完成要进行的处理:DOM 则将整个XML 文件构造为一棵DOM ...

  2. PHP - 概述

    第1章 PHP概述 学习要点: 1.PHP基础知识 2.PHP的环境配置 3.安装三款主流程序 4.PHP开发工具的选择 5.一个简单的示例 一.PHP基础知识 PHP PHP是一种目前最流行的服务端 ...

  3. 【AR实验室】ARToolKit之概述篇

    0x00 - 前言 我从去年就开始对AR(Augmented Reality)技术比较关注,但是去年AR行业一直处于偶尔发声的状态,丝毫没有其"异姓同名"的兄弟VR(Virtual ...

  4. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  5. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  6. .Net 大型分布式基础服务架构横向演变概述

    一. 业务背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 二. 基础 ...

  7. [C#] 进阶 - LINQ 标准查询操作概述

    LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...

  8. PHP中遍历XML之SimpleXML

    简单来讲述一些XML吧,XML是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言.XML是当今用于传输数据的两大工具之一,另外一个是json. 我们在PHP中使用XML也是用来传输数据, ...

  9. 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

随机推荐

  1. sping整合redis,以及做mybatis的第三方缓存

    一.spring整合redis Redis作为一个时下非常流行的NOSQL语言,不学一下有点过意不去. 背景:学习Redis用到的框架是maven+spring+mybatis(框架如何搭建这边就不叙 ...

  2. vee-validate 中文配置报错及自定义规则 报错.updateDictionary/.addlocale is not a function

    原因由于vee-validate版本更新的问题导致的. 1. 原因分析: a 新版vee-validate的语言配置方法变化了, Validator.localize('zh_CN', zh_CN) ...

  3. Python与系统的交互方式

    本节内容 os与commands模块 subprocess模块 subprocess.Popen类 总结 我们几乎可以在任何操作系统上通过命令行指令与操作系统进行交互,比如Linux平台下的shell ...

  4. 爬虫从网页中去取的数据中包含&nbsp;空格

    爬虫从网页中爬取的数据中带了一个 这样的空格,使用trim()函数和replace(" ", "")去掉不了,找了一下资料发现,空格有两种一种是从键盘输入的对应 ...

  5. NBUT 1220 SPY 2010辽宁省赛

    Time limit  1000 ms Memory limit  131072 kB The National Intelligence Council of X Nation receives a ...

  6. art.dialog 使用说明

    Js代码 2. 传入HTMLElement   备注:1.元素不是复制而是完整移动到对话框中,所以原有的事件与属性都将会保留 2.如果隐藏元素被传入到对话框,会设置display:block属性显示该 ...

  7. Linux shell —— 数组与关联数组

    使用 declare -A(declare 的用法请使用 help 进行查看,help declare) 进行声明关联数组变量: $ declare -A fruits_price $ fruits_ ...

  8. Linux Foundation(笔记)

    /************************************************************* * Linux Foundation * 1. 总结一下Linux的基础内 ...

  9. PDF软件推荐——Sumatra PDF - imsoft.cnblogs

    Sumatra PDF 优点:绿色,小巧,快速,支持格式丰富 缺点:不支持修改和添加标记 链接: http://pan.baidu.com/s/1eQ1s3Nc 密码: d8h6 主页:http:// ...

  10. cocoapods 安装过程及常见问题

    1.可以参考这个网页的教程:http://code4app.com/article/cocoapods-install-usage 2.按照以下步骤进行安装: 1.配置rugy静态环境 gem sou ...