Home  >  Article  >  php教程  >  轻量级的xml文档生成类

轻量级的xml文档生成类

WBOY
WBOYOriginal
2016-06-21 09:09:32927browse

xml

PHP代码:--------------------------------------------------------------------------------

/**
* 轻量级XML文档生成类(非dom)
* author: q3boy
* 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; $ideclare); $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.'name;
foreach($itm->attrib as $key=>$val) {
$out .=" $key=\"".$this->encode($val)."\"";
}
if(is_array($itm->value)) {
$out .='>'.$br;
for($i=0; $ivalue); $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;
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 '',']] >',$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&234'\"23");

$xml1->addElement('test4','test2-3');
$xml->addElement('test455','taadsfafdsadest2-3');
$xml->addComment('adsfadsf');//注释
/* CDATA数据 */
$xml->addCDATA('cdname','dflkgmsglsd
f]gl
sdgl
asgl
sf"&ldgsldkfg]]>
sldf
gsdfgsD?FG>SS?D>');
$x1 = &$xml->addElement('test455');
$x1->setAttrib("asd",123423);
$xml->setAttrib(array("asd"=>123,'sdfgdfg'=>2341));
$xml->setAttrib("asd",123423);
/* 输出文件 */
$xml->tofile('aaa.xml');
?>



Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn