PHP的xml操作类

Posted ricky_zhu_li_ke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP的xml操作类相关的知识,希望对你有一定的参考价值。

我直接复制的phpCMS源码的代码:非常实用,分享给大家

<?php
下面的这个类可以将一个关联数组和xml字符串之间相互转化。 <?php /**  * @author                wangtiecheng(jim_@live.cn)  * @link                http://www.phpcms.cn http://www.ku6.cn  * @copyright            2005-2009 PHPCMS/KU6 Software LLCS  * @license                http://www.phpcms.cn/license/  * @datetime            Wed Aug 05 18:37:10 CST 2009  * @lastmodify            Wed Aug 05 18:37:10 CST 2009  * ------------------------------------------------------------  * $xml = new xml();  * $res = $xml->xml_unserialize($data);  */
class xml      var $parser;     var $document;     var $parent;     var $stack;     var $last_opened_tag;
    public function xml()          $this->parser = xml_parser_create();             xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false);             xml_set_object($this->parser, $this);             xml_set_element_handler($this->parser, 'open','close');             xml_set_character_data_handler($this->parser, 'data');        
    public function destruct()          xml_parser_free($this->parser);    
    /**      * unserialize      * @param xml字符串      * @return array      */     public function xml_unserialize($xml)          $data = $this->parse($xml);             $this->destruct();             return $data;        
    /**      * serialize      * @param $data 数组      * @return string      */     public function xml_serialize(&$data, $level = 0, $prior_key = NULL)          if($level == 0)              ob_start();             echo "<?xml version=\\"1.0\\" encoding=\\"".CHARSET."\\"?>\\n<root>","\\n";                 while(list($key, $value) = each($data))              if(!strpos($key, ' attr'))                  if(is_array($value) and array_key_exists(0, $value))                      $this->xml_serialize($value, $level, $key);                      else                      $tag = $prior_key ? $prior_key : (is_numeric($key) ? 'item' : $key);                     echo str_repeat("\\t", $level),'<',$tag;                     if(array_key_exists("$key attr", $data))                          while(list($attr_name, $attr_value) = each($data["$key attr"]))                              echo ' ',$attr_name,'="',new_html_special_chars($attr_value),'"';                                                 reset($data["$key attr"]);                                            if(is_null($value))                          echo " />\\n";                      elseif(!is_array($value))                          echo '>',new_html_special_chars($value),"</$tag>\\n";                      else                          echo ">\\n",$this->xml_serialize($value, $level+1),str_repeat("\\t", $level),"</$tag>\\n";                                                                 reset($data);            if($level == 0)              $str = &ob_get_contents();             ob_end_clean();             return $str.'</root>';            
    public function parse(&$data)         $this->document = array();             $this->stack = array();             $this->parent = &$this->document;             return xml_parse($this->parser, $data, true) ? $this->document : NULL;        
    public function open(&$parser, $tag, $attributes)         $this->data = '';         $this->last_opened_tag = $tag;         if(is_array($this->parent) && array_key_exists($tag, $this->parent))              if(is_array($this->parent[$tag]) && array_key_exists(0,$this->parent[$tag]))                  $key = $this->count_numeric_items($this->parent[$tag]);              else                  if(array_key_exists("$tag attr", $this->parent))                         $arr = array('0 attr'=>&$this->parent["$tag attr"], &$this->parent[$tag]);                        unset($this->parent["$tag attr"]);                     else                      $arr = array(&$this->parent[$tag]);                                    $this->parent[$tag] = &$arr;                 $key = 1;                         $this->parent = &$this->parent[$tag];          else              $key = $tag;        
        if($attributes)              $this->parent["$key attr"] = $attributes;                 $this->parent  = &$this->parent[$key];         $this->stack[] = &$this->parent;    
   public  function data(&$parser, $data)          if($this->last_opened_tag != NULL)              $this->data .= $data;            
    public function close(&$parser, $tag)          if($this->last_opened_tag == $tag)                  $this->parent = $this->data;                 $this->last_opened_tag = NULL;                     array_pop($this->stack);         if($this->stack)              $this->parent = &$this->stack[count($this->stack)-1];            
    public function count_numeric_items(&$array)          return is_array($array) ? count(array_filter(array_keys($array), 'is_numeric')) : 0;        

?>

以上是关于PHP的xml操作类的主要内容,如果未能解决你的问题,请参考以下文章

PHP 用于PHP的OOP RSS / XML类

php怎么生成带冒号的节点和属性的,xml使用SimpleXMLElement类或其他php类

JQuery 如何增删改 XML

如何使用 php 类 DOMDocument 将新的 xml 节点附加到现有的 .xml 文件?

php xml 和json转成Array(数组)格式和数组转成xml和json

php xml 和json转成Array(数组)格式和数组转成xml和json