Children = array() ; } function LoadFile( $filePath ) { $this->Children = array() ; $this->_CurrentNode = &$this ; return $this->LoadXml( file_get_contents( $filePath ) ) ; } function LoadXml( $xml ) { // Create the XML Parser. $this->_XmlParser = xml_parser_create( '' ) ; // Setup the parser. xml_parser_set_option( $this->_XmlParser, XML_OPTION_SKIP_WHITE, 1 ) ; xml_set_object( $this->_XmlParser, $this ) ; xml_set_element_handler( $this->_XmlParser, '_ElementOpen', '_ElementClosed' ) ; xml_set_character_data_handler( $this->_XmlParser, '_ElementData' ) ; // Parse it. if( !xml_parse( $this->_XmlParser, $xml ) ) { ExitError( sprintf( "XML error: %s at line %d", xml_error_string(xml_get_error_code( $this->_XmlParser ) ), xml_get_current_line_number( $this->_XmlParser ) ) ) ; } // Release the parser. xml_parser_free( $this->_XmlParser ) ; unset( $this->_XmlParser ) ; unset( $this->_CurrentNode ) ; // For debug purposes: // SaveStringToFile( print_r( $this, TRUE ), 'parsed.txt' ) ; // print_r( $this ) ; // exit ; return TRUE ; } function _ElementOpen( $parser, $name, $attrs ) { $newNode = (object)array( 'Parent' => &$this->_CurrentNode, 'Name' => $name, 'Attributes' => $attrs, 'Value' => '', 'Children' => array() ) ; $this->_CurrentNode->Children[ $name ][] = &$newNode ; $this->_CurrentNode = &$newNode ; } function _ElementClosed( $parser, $name ) { $this->_CurrentNode = &$this->_CurrentNode->Parent ; } function _ElementData( $parser, $data ) { $this->_CurrentNode->Value .= $data ; } } ?>