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文件,没有属性,键值一一对应 * * * *@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; } } }* *1 *标题一 *详细内容一 *
简单用法示例如下:
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操作的在线工具供大家参考使用:
在线