PHP利用DOMDoucment动态创建XML文件,已封装为类,简单实效,支持多节点扩展。先上代码
<?php/*
动态创建XML文件类
功能:支持多节点扩展
createXMLClass.php
原创,引用请保留此信息
writed by adengou 2014.1.6
*/
header('Content-Type: text/html; charset=utf-8');
class CcreateXML{protected $file;//完整的文件路径
protected $root;//节点名称;默认root
protected $dom;//dom对象
protected $charet;//编码默认utf-8
private $fatherNode;//父节点
private $fatherNodeName;//父节点名称
//
public $resultContent;//显示结果
public $succeed;//创建是否成功
public $creMsg; //创建信息
public function __construct($path_filename,$root='root',$charet='utf-8'){
//建立构造函数$this->file = $path_filename;
$this->charet = $charet;
$this->dom = new DOMDocument('1.0',$charet);//创建DOMDocument对象
$this->root = $root;
$this->succeed = 0;
$this->creMsg ="";
}
public function __destruct() {
//析构函数
unset($this->dom);//销毁对象
fclose($this->file);//关闭文件
}
private function fnExistFile(){
$handle = fopen ($this->file,"w"); #fopen,即打开文件,若文件不存在,则自动创建;
if (!is_writable ($this->file)){
$this->creMsg .= "文件:".$filename."不可写,请检查其属性后重试!";
$this->succeed = 0;
}
else{
$this->succeed = 1;
}
return $this->succeed;
}
public function fnCreateRoot(){
//创建根节点
if($this->fnExistFile()){
$this->fatherNodeName =$this->root;
$module=$this->dom->createElement($this->root);// 建立根节点名称//赋值
$this->dom->appendChild($module);//创建该值
$this->fatherNode =$module;
$this->succeed = 1;
$this->fatherNode =$module;
}
else
{
$this->succeed = 0;
$this->fatherNode=NULL;
}
return $this->fatherNode;
}
public function fnCreateNode($fatherNode,$chilNodeName='childNode',$id=NULL,$name=NULL,$content=NULL){
//创建子节点,包括子节点名称、ID,NAME,内容
$chilNode=$this->dom->createElement($chilNodeName); // 增加第一个子节点,名称为$chilNodeName//赋值
if($name!=NULL){
$varit_name=$this->dom->createAttribute('name'); //建立第一个子节点的一个属性,名为'name'//赋值
$varit_name->nodeValue=$name; //name的值为'$name'
$chilNode->setAttributeNode($varit_name); //第一个节点添加$name的内容//创建该值
}
if($id!=NULL){
$varit_id=$this->dom->createAttribute("id"); //建立第一个子节点的一个属性,名为'name'//赋值
$varit_id->nodeValue=$id; //name的值为'最新动态'
$chilNode->setAttributeNode($varit_id); //第一个节点添加$name的内容//创建该值
}
$varit_value=$this->dom->createTextNode($content); //增加节点内容
$chilNode->appendChild($varit_value); //第一个节点添加$name的内容//创建该值
}
//
$fatherNode->appendChild($chilNode); //闭合$chilNode节点
//
$this->creMsg .="<br/>文件: ".$this->file."写入节点 ".$this->fatherNodeName."->".$chilNodeName. " 成功";
$this->succeed = 1 ;
$this->fatherNode = $chilNode;
}else{
$this->creMsg .="<br/>文件: ".$this->file."写入节点 ".$this->fatherNodeName."->".$chilNodeName. " 失败";
$this->succeed = 0 ;
$this->fatherNode = NULL;
}
// if end
$this->fatherNodeName =$chilNodeName;
return $this->fatherNode;
//fn end
}
public function fnCreateXMLfile(){
//创建XML文件
$this->resultContent = $this->dom->saveXML();//在屏幕上输出XML
$this->dom->save($this->file);//保存XML文件
chmod ($this->file,0666);//设置该文件的读写属
}
//class end
}
?>
//应用范例
//test.php
/*
include_once("createXMLClass.php");
$xml = new CcreateXML("test/1.xml","math","utf-8");
$faterNode = $xml->fnCreateRoot();
$f1 = $xml->fnCreateNode($faterNode,"p","p1");
if($f1!=NULL){
$xml->fnCreateNode($f1,"dood","ld","lp","good1");
$g2=$xml->fnCreateNode($f1,"dood2","ld2","lp2");
}
$f2=$xml->fnCreateNode($faterNode,"s","s1");
if($f2!=NULL){
$xml->fnCreateNode($f2,"d","d","d","d");
$xml->fnCreateNode($f2,"d2","d","d","d");
}
$f3=$xml->fnCreateNode($faterNode,"p","p2");
if($f3!=NULL){
$xml->fnCreateNode($f3,"f3_1","f3_1","f3_1","f3_1");
$xml->fnCreateNode($f3,"f3_2","f3_2","d2","d442");
}
if($g2!=NULL){
$h= $xml->fnCreateNode($g2,"g_1","g_1","g_1");
$xml->fnCreateNode($g2,"g_2","g_2","g2","g2");
}
if($h!=NULL)
{
$xml->fnCreateNode($h,"h","h","h","h");
$xml->fnCreateNode($h,"h2","h2","h2","h2");
}
$xml->fnCreateXMLfile();
echo $xml->creMsg;
*/
?>