加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

PHP封装的XML简单操作类完整实例

发布时间:2021-03-16 06:43:44 所属栏目:编程 来源:网络整理
导读:本篇章节讲解PHP封装的XML简单操作类。供大家参考研究具体如下: xml_dom.php封装类文件: dbfile = $db_file; if(!file_exists($db_file)) {// die('未找到数据库文件

本篇章节讲解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 * 标题一 * 详细内容一 * * * @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文件:

getData();//读取xml文件内容 var_dump($xmlarr);

运行结果:

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操作的在线工具供大家参考使用:

在线XML/JSON互相转换工具:

在线格式化XML/在线压缩XML:

XML

在线压缩/格式化工具:

XML

代码在线格式化美化工具:

更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》及《》

希望本文所述对大家PHP程序设计有所帮助。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!