charset); } public function Cxml($data=null,$file='') { if (!is_array($data) || count($data) == 0) return false; $dom = new DOMDocument('1.0',$this->charset); //添加DOM根元素 $resultElement = $dom->createElement($this->root); //设置DOM根元素属性 $this->Attribute($this->root_attributes,$dom,$resultElement); //将数组转换为xml添加到根元素 $this->Array2Xml($dom, $data, $resultElement); //加入DOM对象 $dom->appendChild($resultElement); if($file) { //生成xml文件 $r = $dom->save($file); return $r ; }else{ //输出XML显示 $this->outHeader(); return $dom->saveXML(); } } public function Xml2Array($file=''){ if(!is_file($file)) return false; //$dom = new DOMDocument('1.0',$this->charset); //$array=$this->xml_to_array(simplexml_load_file($file)); $array=$this->simplexml2array(simplexml_load_file($file)); return $array; } public function Array2Xml($dom, $data, $result='') { if (is_array($data)) { foreach ($data as $key => $value) { if (is_numeric($key)) { $NodeName = $value['NodeName']['value']; if($value['NodeName']['attributes'])$value['attributes'] = $value['NodeName']['attributes']; unset($value['NodeName']); } else { $NodeName = $key; } if (!isset($value['value'])) { $key_Element = $dom->createElement($NodeName); $result->appendChild($key_Element); if($value['attributes']){ $this->Attribute($value['attributes'],$dom,$key_Element); unset($value['attributes']); } $this->Array2Xml($dom, $value, $key_Element); } else { $key_Element = $dom->createElement($NodeName); if($value['ishtml']){ $key_Element->appendChild($dom->createCDATASection($value['value'])); }else{ $key_Element->appendChild($dom->createTextNode($value['value'])); } if($value['attributes']){ $this->Attribute($value['attributes'],$dom,$key_Element); } $result->appendChild($key_Element); } } return $result; } } public function Attribute($att,$dom,$key_Element){ $attributes_element=''; foreach ($att as $key =>$rs){ $attributes_element = $dom->createAttribute($key); $attributes_element->appendChild($dom->createTextNode($rs)); $key_Element->appendChild($attributes_element); } } public function simplexml_to_array($xml) { $ar = array(); foreach($xml->children() as $k => $v) { $child = simplexml_to_array($v); if( count($child) == 0 ) { $child = (string)$v; } foreach( $v->attributes() as $ak => $av ) { if( !is_array( $child ) ) { $child = array( "value" => $child ); } $child[$ak] = (string)$av; } if (!in_array($k,array_keys($ar))) { $ar[$k] = $child; }else{ if($ar[$k][0]){ $ar[$k][] = $child; }else{ $ar[$k] = array($ar[$k]); $ar[$k][] = $child; } } } return $ar; } public function simplexml2array($xml) { $arXML=array(); $arXML['name']=trim($xml->getName()); $arXML['value']=trim((string)$xml); $t=array(); foreach($xml->attributes() as $name => $value){ $t[$name]=trim($value); } $arXML['attr']=$t; $t=array(); foreach($xml->children() as $name => $xmlchild) { if (!in_array($name,array_keys($t))) { $t[$name] = $this->simplexml2array($xmlchild); }else{ if(!$t[$name][0]){ $t[$name] = array($t[$name]); } $t[$name][]= $this->simplexml2array($xmlchild); } } $arXML['children']=$t; return($arXML); } } ?>