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]

Reply via email to