PHP封装的XML简单操作类完整实例
本文实例讲述了PHP封装的XML简单操作类。分享给大家供大家参考,具体如下:
xml_dom.php封装类文件:
dbfile=$db_file;
if(!file_exists($db_file))
{
//die('未找到数据库文件');
$this->dblink=newDOMDocument('1.0','utf-8');
$root=$this->dblink->createElement('root');
$this->dblink->appendChild($root);
$this->dblink->formatOutput=true;//xml文件保留缩进样式
$this->dblink->save($this->dbfile);
}
else
{
$this->dblink=newDOMDocument();
$this->dblink->formatOutput=true;
$this->dblink->load($this->dbfile);
}
}
/**
*遍历所有元素
*===============================================
*标准xml文件,一个元素可能有n个属性,可用自定义键[nodevalue]获取元素值
*
*
*1
*标题一
*详细内容一
*
*===============================================
*简单xml文件,没有属性,键值一一对应
*
*
*
*1
*标题一
*详细内容一
*
*
*@param$node
*@returnarray
*/
functiongetData($node=0){
if(!$node)
{
$node=$this->dblink->documentElement;
}
$array=array();
foreach($node->attributesas$attribute)
{
$key=$attribute->nodeName;
$val=$attribute->nodeValue;
$array[$key]=$val;
}
if(count($array))//有属性,则用[nodevalue]键代表值
{
$array['nodevalue']=$node->nodeValue;
}
//递归遍历所有子元素
$node_child=$node->firstChild;
while($node_child)
{
if(XML_ELEMENT_NODE==$node_child->nodeType)
{
$tagname=$node_child->tagName;
$result=$this->getData($node_child);
if(isset($array[$tagname]))//发现有重复tagName的子元素存在,所以改用数组存储重复tagName的所有子元素
{
if(!is_array($array[$tagname][0]))
{
$tmp=$array[$tagname];
$array[$tagname]=array();
$array[$tagname][]=$tmp;
}
$array[$tagname][]=$result;
}
else
{
$array[$tagname]=$result;
}
}
$node_child=$node_child->nextSibling;
}
if(!count($array))//没有子元素&没有属性=最末子元素,就返回该元素的nodeValue值
{
return$node->nodeValue;
}
return$array;
}
/**
*把array数据写到xml文件(覆盖)
*@param$data
*/
publicfunctionsetData($data,&$node=0)
{
$is_root=false;
if(!$node)
{
$is_root=true;
$node=$this->dblink->documentElement;
//清除原数据
$remove=array();
$node_child=$node->firstChild;
while($node_child)
{
$remove[]=$node_child;
$node_child=$node_child->nextSibling;
}
foreach($removeas$r)
{
$node->removeChild($r);
}
}
if(is_array($data))
{
foreach($dataas$k=>$v)
{
if(is_array($v))
{
foreach($vas$r)
{
$item=$this->dblink->createElement($k);
$result=$this->setData($r,$item);
$node->appendChild($result);
}
}
else
{
$item=$this->dblink->createElement($k);
$value=$this->dblink->createTextNode($v);
$item->appendChild($value);
$node->appendChild($item);
}
}
}
else
{
$item=$this->dblink->createTextNode($data);
$node->appendChild($item);
}
if($is_root)
{
$this->dblink->save($this->dbfile);//覆盖写入
}
else
{
return$node;
}
}
}
简单用法示例如下:
smp.xml文件:
1 标题一 详细内容一 2 标题二 详细内容二 3 标题三 详细内容三
index.php文件:
include("xml_dom.php");
$xml=newxml_dom("smp.xml");//载入xml文件
$xmlarr=$xml->getData();//读取xml文件内容
var_dump($xmlarr);
运行结果:
array(1){
["posts"]=>
array(3){
[0]=>
array(3){
["id"]=>
string(1)"1"
["title"]=>
string(9)"标题一"
["content"]=>
string(15)"详细内容一"
}
[1]=>
array(3){
["id"]=>
string(1)"2"
["title"]=>
string(9)"标题二"
["content"]=>
string(15)"详细内容二"
}
[2]=>
array(3){
["id"]=>
string(1)"3"
["title"]=>
string(9)"标题三"
["content"]=>
string(15)"详细内容三"
}
}
}
PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:
在线