Cardinal from IRC answered my question. It turns out that when you indent
your childs with tabs, it sees those tabs as cdata of the root element. I
had the following XML file:
sampleDBName
sampleUser
localhost
The tabs in front of the child elements were treated as CDATA of the
root node.
"Leendert" <[EMAIL PROTECTED]> wrote in message
[EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
> "Leendert" <[EMAIL PROTECTED]> wrote in message
> [EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
> > It appears that:
> >
> > xml_set_character_data_handler($parser, 'handleData');
> >
> > calls handleData() 3 times per element. Does anyone know the reason
behind
> > this? Sounds like that could be very inefficient.
> >
> >
>
> FYI, this is the code I'm using:
>
> class XMLSettingsParser
> {
> var $settingsFile;
> var $xmlData;
> var $parser;
> var $tempElementName;
>
> function XMLSettingsParser($settingsFile)
> {
> $this->SettingsFile = $settingsFile;
>
> $this->xmlData = implode('', file($settingsFile));
>
> $this->parser = xml_parser_create();
> xml_set_object($this->parser, &$this);
>
> xml_set_element_handler($this->parser, 'handleStartElement',
> 'handleEndElement');
> xml_set_character_data_handler($this->parser, 'handleData');
>
> xml_parse($this->parser, $this->xmlData);
> xml_parser_free($this->parser);
> }
>
> function handleStartElement($parser, $name, $attribs)
> {
> $this->tempElementName = $name;
> }
>
> function handleEndElement()
> {}
>
> function handleData($parser, $data)
> {
> //if(!defined($this->tempElementName))
>define($this->tempElementName, $data);
> }
> }
> ?>
>
> It gives me 2 notices per element that the constant is already defined,
> while it shouldn't. When I do use the conditional
> if(!defined($this->tempElementName)) it works fine of course. But it
should
> work in the first place.
> Note: you need error_reporting(E_NOTICE); on to see the error.
>
>
>
>
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php