• PHP使用DOMDocument 操作xml


      1 <?php
      2 class xmlMessage{
      3     protected $doc;
      4     protected $rootKey;//根节点
      5     public $xmlName;//xml文件名
      6 
      7     /*
      8     xmlMessage类构造函数
      9     @param string xmlName
     10     */
     11     public function  __construct($xmlName,$rootKey) {
     12         
     13         $this->xmlName=$xmlName;
     14         $this->rootKey = $rootKey;
     15         
     16         if(!file_exists($this->xmlName))
     17          {
     18             $this->doc = new DOMDocument('1.0', 'utf-8');
     19             $rootKey = $this->doc->createElement($this->rootKey);//create root key
     20             $this->rootKey = $this->doc->appendChild($rootKey);
     21             $this->doc->save($this->xmlName);
     22          }else
     23          {
     24             $this->doc = new DOMDocument();            
     25             $this->doc->load($xmlName);
     26 
     27          }
     28          
     29             $this->doc->formatOutput = true;
     30     
     31         }
     32     
     33 
     34     /*
     35      创建子节点
     36      @param $childNode :要创建的子节点及属性$child_attr_array=null;    
     37      @param $parentNode:要创建的子节点的父节点及属性 $parent_attr_array=null;
     38     */
     39     public function createChildNode($childNode,$child_attr_array=null,$parentNode,$parent_attr_array=null)
     40     {
     41         $cnode = $this->doc->createElement($childNode);
     42 
     43         //获取要添加的子节点的父节点
     44         if($parent_attr_array!=null){
     45             foreach($parent_attr_array as $attr_key=>$attr_value)
     46             {
     47                 $cnode = $this->getNodeByAttr($parentNode,$attr_key,$attr_value)->appendChild($cnode);
     48             }
     49         }else
     50         {        //避免创建父节点即:在父节点下创建子节点    
     51                 $cnode = $this->doc->getElementsByTagName($parentNode)->item(0)->appendChild($cnode);
     52         }
     53 
     54         
     55            //设置子节点值
     56         //$cnode->nodeValue=$chileNodeValue;
     57 
     58         //设置属性
     59         if($child_attr_array!=null)
     60         {
     61             foreach($child_attr_array as $attr_key=>$attr_value)
     62             {
     63                 $cnode->setAttribute($attr_key,$attr_value);
     64             }
     65         }
     66 
     67 
     68 
     69     }
     70 
     71     /*
     72       获取具有某属性的节点
     73       @param 节点名$nodeName,及其属性和值$attrName,$attrValue
     74       @return DOMNode 
     75     */
     76     public function getNodeByAttr($nodeName,$attrName,$attrValue)
     77     {
     78         $nodeList = $this->doc->getElementsByTagName($nodeName);
     79 
     80         for($i=0; $i<$nodeList->length;$i++)
     81         {
     82             $attrList = $nodeList->item($i)->getAttributeNode($attrName);
     83             if($attrList->value == $attrValue)
     84             {
     85                 return $nodeList->item($i);
     86                 
     87                 //echo 'okkkkkk'.'<br>';;
     88             }
     89        
     90         }
     91         
     92     }
     93     
     94 
     95     //删除具有某个属性的节点
     96     public function delete_Node($nodeName,$attrName,$attrValue)
     97     {
     98         try
     99         {
    100            $delete_Node = $this->getNodeByAttr($nodeName,$attrName,$attrValue);
    101            $delete_Node->parentNode->removeChild($delete_Node);
    102 
    103         }catch(DOMException $e)
    104         {
    105             echo 'fail!';
    106         }
    107     }
    108 
    109 
    110     //创建节点属性
    111     public function createNodeAttribute($nodeName,$attr,$aValue)
    112     {
    113          $nodes = $this->doc->getElementsByTagName($nodeName);
    114           for($i=0; $i<$nodes->length;$i++)
    115         {
    116           $nodeValue = $nodes->item($i)->nodeValue.'<br>';
    117         }
    118         
    119         //$node->item[0]->setAttribute($attr,$aValue);
    120 
    121     }
    122 
    123     /*
    124      保存xml
    125     */
    126     public function saveXml()
    127         {
    128            
    129            $this->doc->save($this -> xmlName);
    130         }
    131 
    132 
    133 
    134    
    135 
    136 }
    137 
    138 //实例操作
    139   $myXml = new xmlMessage("opera.xml","世界");//创建一个以"世界"为根节点的xml文件
    140  
    141   $myXml->createChildNode("国家",array('name'=>'中国','人口'=>'1亿'),'世界');
    142 
    143   $myXml->createChildNode("国家",array('name'=>'英国','人口'=>'50millon'),'世界');
    144 
    145   $myXml->createChildNode("山东",array('city'=>'济南','note'=>'省会'),'国家',array('name'=>'英国'));
    146   $myXml->createChildNode("浙江",'','国家',array('name'=>'英国'));
    147 
    148   //$myXml->createChildNode("历城",array('city'=>'济南','note'=>'区'),'山东');
    149 
    150 
    151   //$myXml->createNodeAttribute("国家","人口",125);
    152 
    153   //$myXml->getNodeByAttr("国家",'name','英国');
    154   //$myXml->delete_Node("历城",'city','济南');
    155 
    156 
    157   $myXml->saveXml();
    158 
    159 ?>
  • 相关阅读:
    numpy基础篇-简单入门教程4
    杭电oj 多项式求和
    杭电oj 素数判定
    杭电oj 水仙花数
    杭电oj 求数列的和
    杭电oj 数值统计
    杭电oj 平方和与立方和
    杭电oj 求奇数的乘积
    杭电 oj 第几天?
    杭电 oj 成绩转换
  • 原文地址:https://www.cnblogs.com/hubing/p/3115011.html
Copyright © 2020-2023  润新知