首页 > 开发 > PHP > 正文

PHP封装XML简单操作类的示例

2024-05-04 22:02:44
字体:
来源:转载
供稿:网友

学习之路不可停止,最近在玩PHP,也动手尝试写了一个实例,接下来就献给大家PHP封装XML简单操作类的示例,此文结合完整实例形式分析了php针对xml文件进行载入、读取及写入相关操作技巧的封装与使用方法喔~需要的小伙伴们赶紧往下了解吧。

xml_dom.php封装类文件:

dbfile = $db_file;    if(!file_exists($db_file))    {//     die('未找到数据库文件');      $this->dblink = new DOMDocument('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 = new DOMDocument();      $this->dblink->formatOutput = true;      $this->dblink->load($this->dbfile);    }  }  /**   * 遍历所有元素   * ===============================================   * 标准xml文件,一个元素可能有n个属性,可用自定义键[nodevalue]获取元素值   *    * 
* 1 * 标题一 * 详细内容一 *
* =============================================== * 简单xml文件,没有属性,键值一一对应 * * * * 1 * 标题一 * 详细内容一 * * * @param $node * @return array */ function getData($node=0){ if(!$node) { $node = $this->dblink->documentElement; } $array = array(); foreach($node->attributes as $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 */ public function setData($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($remove as $r) { $node->removeChild($r); } } if(is_array($data)) { foreach($data as $k=>$v) { if(is_array($v)) { foreach($v as $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=new xml_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) "详细内容三"  } }}以上就是小编分享的PHP封装XML简单操作类的示例,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表