I didn't see any responses to this the other day when I asked so this time I'll include source.. just cutting and pasting so hopefully nothing gets clobbered.. When I parse this lil bit of raw data it parses properly. You can trace it and see that it opens and closes the tags properly and that it writes the $this->dom variable properly in the parsers close_tag () function. However when you return the $this->dom value afterwards the variables previous value is returned rather than the current value. Any ideas what I am doing wrong? Thanks. <? //index file include_once ( 'common.inc' ); // does all my settings and includes.. in this case includes the below classes $raw = "<HTML><HEAD><TITLE>Howdy!</TITLE></HEAD>"; $raw .= "<BODY BGCOLOR='RED'>My dog is cute. My cat is cute.</BODY></HTML>"; $xml_parser = new xml_parser; $document = $xml_parser->parse ( $raw ); print "<PRE>"; print_r ( $document ); print "</PRE>"; ?> <? // classes file.. class xml_parser { var $encoding; var $parser; function xml_parser ( $encoding = 'ISO-8859-1' ) { $this->encoding = $encoding; if ( $this->parser = xml_parser_create () ) { xml_set_object ( $this->parser, $this ); xml_set_element_handler ( $this->parser, "tag_open", "tag_close" ); xml_set_character_data_handler ( $this->parser, "cdata"); } } function parse ( $data ) { xml_parse ( $this->parser, $data ); } function tag_open ( $parser, $tag, $attributes ) { foreach ( $attributes as $key => $value ) { $attrib_str .= ", $key=$value"; } print "<UL>\n"; print "<LI>Open: $tag$attrib_str</LI>\n"; } function cdata ( $parser, $cdata ) { print "<LI>Data: $cdata</LI>\n"; } function tag_close ( $parser, $tag ) { print "<LI>Close: $tag</LI>\n"; print "</UL>\n"; } } class xml_parser { var $encoding; var $parser; var $opened_tags = array (); var $dom; function xml_parser ( $encoding = 'ISO-8859-1' ) { $this->encoding = $encoding; $this->create (); $this->configure (); } function create () { $this->parser = xml_parser_create ( $this->encoding ); } function configure () { xml_set_object ( $this->parser, $this ); xml_set_element_handler ( $this->parser, "open_tag", "close_tag" ); xml_set_character_data_handler ( $this->parser, "cdata" ); } function parse ( $data ) { xml_parse ( $this->parser, $data ); return $this->dom; } function open_tag ( $parser, $tag_type, $attributes ) { $tag = new xml_tag ( $tag_type, $attributes ); $this->opened_tags[] = $tag; } function close_tag ( $parser, $tag_type ) { $tag = array_pop ( $this->opened_tags ); $mother_tag = array_pop ( $this->opened_tags ); if ( $mother_tag ) { $mother_tag->add_tag ( $tag ); $this->opened_tags[] = $mother_tag; } elseif ( $tag ) { $this->dom = $tag; function cdata ( $parser, $cdata ) { $this->open_tag ( $parser, 'cdata', $cdata ); $this->close_tag ( $parser, 'cdata' ); } } class xml_tag { var $tag; var $arguments; var $contents = array (); function xml_tag ( $tag, $arguments = array() ) { // Name of the tag. $this->tag = $tag; // Array of argument/value pairs. $this->arguments = $arguments; } function add_tag ( $tag ) { $this->contents[] = $tag; } } ?> -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]