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

来源:互联网 发布:南风知我意2全文下载 编辑:程序博客网 时间:2024/05/22 23:59

详解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);    }  }
0 0
原创粉丝点击