note 59686 added to function.xml-parse-into-struct

From: Date: Tue, 13 Dec 2005 14:31:47 +0000
Subject: note 59686 added to function.xml-parse-into-struct
Groups: php.notes 
Request: Send a blank email to php-notes+get-100065@lists.php.net to get a copy of this message
Something similar to kieran's _xml2array, however much more faster. ------ class ObjectFromXML { var $parser; var $iter = 0; var $path = array(); var $xml = array(); function ObjectFromXML($XML) { $this->parser = xml_parser_create(); xml_set_object($this->parser, &$this); xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE, 1); xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0); xml_set_element_handler($this->parser, "hanleTagStart", "hanleTagEnd"); xml_set_character_data_handler($this->parser, "hanleTagCData"); xml_parse($this->parser, $XML); xml_parser_free($this->parser); $this->xml = $this->xml['_children'][0]; } function getEvalPath() { return '$this->xml[' . "'" . implode("']['", $this->path) . "'" . ']'; } function hanleTagStart($parser, $tag, $attributes) { array_push($this->path, '_children'); array_push($this->path, ($this->iter++)); $e = $this->getEvalPath(); eval ($e . "['_name'] = \$tag;"); if ($attributes !== array()) { eval ($e . "['_attributes'] = \$attributes;"); } } function hanleTagCData($parser, $cdata) { $e = $this->getEvalPath(); eval ($e . "['_value'] = \$cdata;"); } function hanleTagEnd($parser, $tag) { array_pop($this->path); array_pop($this->path); } } ---- Manual Page -- http://www.php.net/manual/en/function.xml-parse-into-struct.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+59686 Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+59686&report=yes&reason=added+to+the+manual Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+59686&report=yes&reason=bad+code Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+59686&report=yes&reason=spam Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+59686&report=yes&reason=useless Delete: non-english -- http://master.php.net/manage/user-notes.php?action=delete+59686&report=yes&reason=non-english Delete: already in docs -- http://master.php.net/manage/user-notes.php?action=delete+59686&report=yes&reason=already+in+docs Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+59686&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+59686&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#100065) next »