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

开发技术 作者: 2024-08-18 12:05:01
这篇文章主要介绍了PHP封装的XML简单操作类,结合完整实例形式分析了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 * 标题一 * 详细内容一 * * * @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程序设计有所帮助。

原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_64352.html
PHP 封装 XML 操作类