PHP-implemented XML operation class [XML Library] And xmllibrary

Source: Internet
Author: User
Tags xml parser

PHP-implemented XML operation class [XML Library] And xmllibrary

This example describes the XML operation class implemented by PHP. 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:

<? Phpinclude ('xml. php '); // reference the php xml operation class $ xml = file_get_contents ('data. xml'); // read the xml file // $ XML = file_get_contents ("php: // input "); // read the POST input stream $ data = XML_unserialize ($ xml); echo '<pre>'; print_r ($ data); echo '</pre>';?>

Data. xml file:

<? Xml version = "1.0" encoding = "GBK"?> <Video> <upload> <videoid> 998 </videoid> <name> <! [CDATA [Recalling the future]> </name> <memo> <! [CDATA [def]> </memo> <up_userid> 11317 </up_userid> </upload> </video>

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:

<? Phpinclude ('xml. php'); // reference the php xml operation class $ XML = XML_serialize ($ data);?>

Ii. php xml operation source code:

<?php#################################################################################### XML_unserialize: takes raw XML as a parameter (a string)# and returns an equivalent PHP data structure###################################################################################function & XML_unserialize(&$xml){ $xml_parser = &new XML(); $data = &$xml_parser->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 '<?xml version="1.0" ?>',"\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),"</$tag>\n";    else echo ">\n",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; }}#################################################################################### 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;}?>

PS: Here are some online tools for xml operations for your reference:

Online XML/JSON conversion tools:
Http://tools.jb51.net/code/xmljson

Online formatting XML/online compression XML:
Http://tools.jb51.net/code/xmlformat

XML online compression/formatting tool:
Http://tools.jb51.net/code/xml_format_compress

XML code online formatting and beautification tools:
Http://tools.jb51.net/code/xmlcodeformat

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.