• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: 小 中 大 | 推荐给好友 上一篇 | 下一篇

轻量级的xml文档生成类

发布: 2007-7-01 15:06 | 作者: admin | 来源: | 查看: 13次 | 进入软件测试论坛讨论

领测软件测试网 PHP代码:--------------------------------------------------------------------------------
<?
/**
* 轻量级XML文档生成类(非dom)
* author: q3boy <[email protected]>
* 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(@#>@#=>@#&lt;@#,@#<@#=>@#&gt;@#,@#&@#=>@#&amp;@#,@#"@#=>@#&quot;@#,"@#"=>@#&apos;@#));
}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@#);
?>

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:[email protected] 电话:010-51297073

软件测试 | 领测国际 | ISTQB | ISTQB官网 | TMMi | TMMi认证 | 国际软件测试工程师认证 | 领测软件测试网