輕量級的xml文檔生成類 - 中國WEB開發者網絡 (http://www.webasp.net) -- 技術教程 (http://www.webasp.net/article/) --- 輕量級的xml文檔生成類 (http://www.webasp.net/article/9/8989.htm) |
| -- 作者:未知 -- 發佈日期: 2004-05-08 |
| PHP代碼:--------------------------------------------------------------------------------
<? /** * 輕量級XML文檔生成類(非dom) * author: q3boy <q3boy@sina.com> * version: v0.1 aplha * update: 2003/9/8 * 支持Element/CDATA/Declare/attribute/Comment,可選擇是否包含換行和縮進 */ class xml { /** 元素名 */ var $name; /** 元素值 */ var $value; /** 元素類型 */ var $type; /** 元素屬性 */ var $attrib; /** XML聲明 */ var $declare; /** 是否縮進換行 */ var $space; /** 構造函數 */ function xml($name='',$value='') { $this->name = $name; $this->value = $value; $this->declare = array(); $this->setTypes('Element'); $this->setAttrib(array()); $this->setSpace(false); } /** 設置元素類型 */ function setTypes($type) { $this->type = $type; } /** 設置是否縮進換行 */ function setSpace($space) { $this->space = $space; } /** 設置元素屬性 */ function setAttrib($name,$value='') { if(is_array($name)) { $this->attrib = array_merge($this->attrib,$name); }else { $this->attrib[$name] = $value; } } /** 添加子元素 */ function &addElement($name='',$value='') { if(!is_array($this->value)) { $this->value = array(); } $xml = new xml($name,$value); $xml->setSpace($this->space); $this->value[] = &$xml; return $this->value[sizeof($this->value)-1]; } /** 添加CDATA數據 */ function &addCDATA($name='',$value='') { if(!is_array($this->value)) { $this->value = array(); } $xml = new xml($name,$value); $xml->setSpace($this->space); $xml->setTypes('CDATA'); $this->value[] = &$xml; return $this->value[sizeof($this->value)-1]; } /** 添加XML聲明 */ function &addDeclare($name='',$value='') { if(!is_array($this->declare)) { $this->value = array(); } $xml = new xml($name,$value); $xml->setSpace($this->space); $xml->setTypes('Declare'); $this->declare[] = &$xml; return $this->declare[sizeof($this->value)-1]; } /** 添加註釋文本 */ function &addComment($content='') { if(!is_array($this->value)) { $this->value = array(); } $xml = new xml($content); $xml->setSpace($this->space); $xml->setTypes('Comment'); $this->value[] = &$xml; return $this->value[sizeof($this->value)-1]; } /** 返回xml文本流 */ function toString($itm='',$layer=0) { if(!is_object($itm))$itm = &$this; /* 換行/縮進 */ if($this->space) { $tab = str_repeat(" ",$layer); $tab1 = str_repeat(" ",$layer+1); $br = "\n"; } /* XML聲明 */ for($i=0; $i<sizeof($itm->declare); $i++) { $out = "<?".$itm->declare[$i]->name; foreach($itm->declare[$i]->attrib as $key=>$val) { $out .=" $key=\"".$this->encode($val)."\""; } $out.="?>$br"; } /* 文檔樹 */ switch($itm->type) { case 'CDATA': case 'Element': $out .= $tab.'<'.$itm->name; foreach($itm->attrib as $key=>$val) { $out .=" $key=\"".$this->encode($val)."\""; } if(is_array($itm->value)) { $out .='>'.$br; for($i=0; $i<sizeof($itm->value); $i++) { $out .=$this->toString(&$itm->value[$i],$layer+1); } $out .= $tab.'</'.$itm->name.'>'.$br; }elseif($itm->value!='') { $out .='>'.$br.$this->encode($itm->value,$itm->type,$tab1,$br).$br.$tab.'</'.$itm->name.'>'.$br; }else { $out .=' />'.$br; } break; case 'Comment': $out .= '<!--'.$br.$itm->name.$br.'-->'.$br; break; } return $out; } /** 生成xml文件 */ function toFile($file) { $fp = fopen($file,'w'); fwrite($fp,trim($this->toString())); fclose($fp); } /** 實體引用轉換 */ function encode($content,$type='Element',$tab1='',$br='') { if($type=='Element') { return $tab1.strtr($content,array('>'=>'<','<'=>'>','&'=>'&','"'=>'"',"'"=>''')); }elseif($type=='CDATA') { return '<![CDATA['.$br.str_replace(']]>',']] >',$content).$br.']]>'; } } } /* example */ /* 對像初始化 */ $xml = new xml('test'); /* 允許輸出換行/縮進 */ $xml->setSpace(true); /* 設置xml聲明 */ $d = &$xml->addDeclare('xml'); $d->setAttrib("version","1.0"); /* 設置xml文檔樹 */ $xml1 = &$xml->addElement('test1','test1-1'); $xml1->addElement('test2','test2-1'); $x2 = &$xml1->addElement('test3','test2-2'); $x2->setAttrib("asd","1&23<>4'\"23"); $xml1->addElement('test4','test2-3'); $xml->addElement('test455','taadsfa<><>fdsadest2-3'); $xml->addComment('adsfadsf');//註釋 /* CDATA數據 */ $xml->addCDATA('cdname','dflkgmsglsd f]gl sdgl asgl sf"&ldgsldkfg]]> sldf gsdfgsD?FG>S<DG>S?D<Fgsd]fglsg>>'); $x1 = &$xml->addElement('test455'); $x1->setAttrib("asd",123423); $xml->setAttrib(array("asd"=>123,'sdfgdfg'=>2341)); $xml->setAttrib("asd",123423); /* 輸出文件 */ $xml->tofile('aaa.xml'); ?> |
| webasp.net |