详解SimpleXML添加_修改_删除_遍历XML节点属性
2016-04-18 08:26
609 查看
详解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概述
要处理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& 4000 gt;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); } }
相关文章推荐
- XML 与 JSON 优劣对比
- As3.0 xml + Loader应用代码
- 网马生成器 MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day
- ext读取两种结构的xml的代码
- 实例解析Ruby程序中调用REXML来解析XML格式数据的用法
- Ruby中XML格式数据处理库REXML的使用方法指南
- C#针对xml基本操作及保存配置文件应用实例
- Ruby使用REXML库来解析xml格式数据的方法
- Ruby程序中创建和解析XML文件的方法
- Ruby的XML格式数据解析库Nokogiri的使用进阶
- asp下查询xml的实现代码
- sqlserver FOR XML PATH 语句的应用
- 使用sp_xml_preparedocument处理XML文档的方法
- EBS xml publisher中文乱码问题及解决办法
- C#中的Linq to Xml详解
- C#操作XML文件实例汇总
- SQL Server中的XML数据进行insert、update、delete
- Ruby中使用Nokogiri包来操作XML格式数据的教程
- C#实现将文件转换为XML的方法