In a follow up on this, here's something else that's kind of bizzare ...

Within this class example, if I add a variable declaration of:

    var $testval = 'this is a test';

And then add to _xml_character_data():

    echo "TEST: $this->testval\n";

... I find that within the class structure, _xml_character_data can READ the
$this->testval values (set outside of any callback function), but apparently
the _xml_start_element() callback function cannot SET
$this->current_element.

My output is:

    element is:
    data is: [valid data]
    TEST: this is a test

Is this a bug? It's beginning to have the feel of one...

-Clay



>>> Here's a brain-bender ... At least it is for me at the moment. : )
>>> 
>>> When I use an XML parser inside a class, the xml_*_handler functions
>> aren't
>>> recognizing "$this->" variables. I can kind of see why ... But would like
>> it
>>> to work anyway. : )
>>> 
>>> Here's an example:
>>> 
>>> class Blah
>>> {
>>>     var $xmlparser;
>>>     var $current_element;
>>> 
>>>     // ...
>>> 
>>>     function _parseXML($data)
>>>     {
>>>         $this->xmlparser = xml_parser_create();
>>>         xml_set_element_handler(
>>>             $this->xmlparser,
>>>             array($this,"_xml_start_element"),
>>>             array($this,"_xml_end_element"));
>>>         xml_set_character_data_handler(
>>>             $this->xmlparser,
>>>             array($this,"_xml_character_data"));
>>>         xml_parse($this->xmlparser, $data);
>>>         xml_parser_free($this->xmlparser);
>>>     }
>>> 
>>>     function _xml_start_element($p, $e_name, $e_attributes)
>>>     {
>>>             $this->current_element = $e_name;
>>>     }
>>> 
>>>     function _xml_end_element($p, $e_name)
>>>     {
>>>             // ...
>>>     }
>>> 
>>>     function _xml_character_data($p, $data)
>>>     {
>>>         echo "element is: ".$this->current_element."\n";
>>>         echo "data is: $data\n";
>>>     }
>>> 
>>> } // end of class Blah
>>> 
>>> 
>>> 
>>> When this XML parser gets called from within the Blah class, the "element
>>> is:" portion of _xml_character_data comes out blank!
>>> 
>>> This sort of makes sense, because the callback functions are "children" of
>>> the xml_parser_create "parent" ... But should that make the children
>>> ignorant of the "grandparent" variables referred to by $this->varname?
>>> 
>>> I hope this makes sense ... Has anyone else encountered this sort of
>>> problem? I'm an old hat at PHP, but am relatively new to both XML parsing
>>> and writing my own classes.
>>> 
>>> Thanks,
>>> Clay
>>> 


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to