XML operation class implemented by PHP [XMLLibrary]

Source: Internet
Author: User
This article mainly introduces the XML operation class implemented by PHP, involving php related operation skills for array, xml conversion, serialization, deserialization, and so on, for more information about the XML operation class implemented by PHP, see the example in this article. We will share this with you for your reference. The details are as follows:

This is an interface program that requires a large amount of analysis and parsing XML. the xml_parse_into_struct () function of PHP cannot directly generate an easy-to-use array, whereas SimpleXML extension is supported in PHP5, I found a good PHP XML operation class on a foreigner's website.

I. Usage example:

1. interpret the XML file as an easy-to-use array:

 '; Print_r ($ data); echo'
';?>

Data. xml file:

 
 
  
   
    
998
   
   回忆未来
   
   def
   
   
    
11317
   
  
 

The corresponding array (Chinese character encoding: UTF-8) generated by the XML operation class ):

Array ([video] => Array ([upload] => Array ([videoid] => 998 [name] => recalling future [memo] => def [up_userid] => 11317 )))

2. convert an array to an XML file:

 

II. php xml Operation Source code:

 parse($xml); $xml_parser->destruct(); return $data;}#################################################################################### XML_serialize: serializes any PHP data structure into XML# Takes one parameter: the data to serialize. Must be an array.###################################################################################function & XML_serialize(&$data, $level = 0, $prior_key = NULL){ if($level == 0){ ob_start(); echo '
 ',"\n"; } while(list($key, $value) = each($data))  if(!strpos($key, ' attr')) #if it's not an attribute   #we don't treat attributes by themselves, so for an emptyempty element   # that has attributes you still need to set the element to NULL   if(is_array($value) and array_key_exists(0, $value)){    XML_serialize($value, $level, $key);   }else{    $tag = $prior_key ? $prior_key : $key;    echo str_repeat("\t", $level),'<',$tag;    if(array_key_exists("$key attr", $data)){ #if there's an attribute for this element     while(list($attr_name, $attr_value) = each($data["$key attr"]))      echo ' ',$attr_name,'="',htmlspecialchars($attr_value),'"';     reset($data["$key attr"]);    }    if(is_null($value)) echo " />\n";    elseif(!is_array($value)) echo '>',htmlspecialchars($value),"
 \n";    else echo ">\n",XML_serialize($value, $level+1),str_repeat("\t", $level),"
 \n";   } reset($data); if($level == 0){ $str = &ob_get_contents(); ob_end_clean(); return $str; }}#################################################################################### XML class: utility class to be used with PHP's XML handling functions###################################################################################class XML{ var $parser; #a reference to the XML parser var $document; #the entire XML structure built up so far var $parent; #a pointer to the current parent - the parent will be an array var $stack; #a stack of the most recent parent at each nesting level var $last_opened_tag; #keeps track of the last tag opened. 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'); } function destruct(){ xml_parser_free(&$this->parser); } function & parse(&$data){  $this->document = array();  $this->stack = array();  $this->parent = &$this->document;  return xml_parse(&$this->parser, &$data, true) ? $this->document : NULL; } function open(&$parser, $tag, $attributes){  $this->data = ''; #stores temporary cdata  $this->last_opened_tag = $tag;  if(is_array($this->parent) and array_key_exists($tag,$this->parent)){ #if you've seen this tag before   if(is_array($this->parent[$tag]) and array_key_exists(0,$this->parent[$tag])){ #if the keys are numeric    #this is the third or later instance of $tag we've come across    $key = count_numeric_items($this->parent[$tag]);   }else{    #this is the second instance of $tag that we've seen. shift around    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; } function data(&$parser, $data){  if($this->last_opened_tag != NULL) #you don't need to store whitespace in between tags   $this->data .= $data; } 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]; }}function count_numeric_items(&$array){ return is_array($array) ? count(array_filter(array_keys($array), 'is_numeric')) : 0;}?>

I hope this article will help you with PHP programming.

For more articles about the XML operation class [XML Library] implemented by PHP, refer to the PHP Chinese website!

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.