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 ?>