123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- <?php
- class Cxml extends Think {
- public $root='rss';
- public $root_attributes=array();
- public $charset='utf-8';
- public $NodeName= 'item';
- public $dom;
- private function __constract() {
- }
- public function outHeader() {
- header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
- header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
- header("Cache-Control: no-cache");
- header("Pragma: no-cache");
- header("Content-type: text/xml; charset=".$this->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);
- }
- }
- ?>
|