PHPBuilder - Converting XML into a PHP data structure Page 8



RSS Twitter
Articles Php Functions

Converting XML into a PHP data structure - Page 8

by: PHP Builder Staff
|
December 25, 2002

The Completed XMLToArray Class


<?php
//######################################################################
class XMLToArray {

    
//----------------------------------------------------------------------
    // private variables
    
var $parser;
    var 
$node_stack = array();

    
//----------------------------------------------------------------------
    /** PUBLIC
     * If a string is passed in, parse it right away.
     */
    
function XMLToArray($xmlstring="") {
        if (
$xmlstring) return($this->parse($xmlstring));
        return(
true);
    }

    
//----------------------------------------------------------------------
    /** PUBLIC
     * Parse a text string containing valid XML into a multidimensional array
     * located at rootnode.
     */
    
function parse($xmlstring="") {
        
// set up a new XML parser to do all the work for us
        
$this->parser xml_parser_create();
        
xml_set_object($this->parser$this);
        
xml_parser_set_option($this->parserXML_OPTION_CASE_FOLDINGfalse);
        
xml_set_element_handler($this->parser"startElement""endElement");
        
xml_set_character_data_handler($this->parser"characterData");

        
// Build a Root node and initialize the node_stack...
        
$this->node_stack = array();
        
$this->startElement(null"root", array());

        
// parse the data and free the parser...
        
xml_parse($this->parser$xmlstring);
        
xml_parser_free($this->parser);

        
// recover the root node from the node stack
        
$rnode array_pop($this->node_stack);

        
// return the root node...
        
return($rnode);
    }

    
//----------------------------------------------------------------------
    /** PROTECTED
     * Start a new Element.  This means we push the new element onto the stack
     * and reset it's properties.
     */
    
function startElement($parser$name$attrs) {
        
// create a new node...
        
$node = array();
        
$node["_NAME"]      = $name;
        foreach (
$attrs as $key => $value) {
            
$node[$key] = $value;
        }
        
$node["_DATA"]      = "";
        
$node["_ELEMENTS"]  = array();

        
// add the new node to the end of the node stack
        
array_push($this->node_stack$node);
    }

    
//----------------------------------------------------------------------
    /** PROTECTED
     * End an element.  This is done by popping the last element from the
     * stack and adding it to the previous element on the stack.
     */
    
function endElement($parser$name) {
        
// pop this element off the node stack
        
$node array_pop($this->node_stack);
        
$node["_DATA"] = trim($node["_DATA"]);

        
// and add it an an element of the last node in the stack...
        
$lastnode count($this->node_stack);
        
array_push($this->node_stack[$lastnode-1]["_ELEMENTS"], $node);
    }

    
//----------------------------------------------------------------------
    /** PROTECTED
     * Collect the data onto the end of the current chars.
     */
    
function characterData($parser$data) {
        
// add this data to the last node in the stack...
        
$lastnode count($this->node_stack);
        
$this->node_stack[$lastnode-1]["_DATA"] .= $data;
    }

    
//----------------------------------------------------------------------
}

//######################################################################
//##  END OF CLASS
//######################################################################
?>

« Previous Page
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
Next Page »

Comment and Contribute

Your comment has been submitted and is pending approval.

Author:

Comment:



Comment:

(Maximum characters: 1200). You have characters left.