This is a basic example of an event-based XML parser in PHP. I got it from php.net. The example was written by Mauricio Massaia. I modified it slightly to take a string or a file address. I also added lines to print the results.
Technorati Tags: networked objects, networks
Instantiating the class with $xml = new xmlClass() sets up the XML parsing engine and defines handlers that will get called automatically whenever a new XML tag is encountered. You can parse either a file by using $xml->parse("filename.xml") or a string using $xml->parseString($someString). When a tag that begins an XML token is encountered, startHandler() will get called automatically. Add any code there to keep track of the token’s name or attributes. Likewise, endHandler() gets when a closing tag is encountered. dataHandler() returns all the text inside the tags.
/*xmlClass example: include("xmlClass.php"); $xml = new xmlClass(); $xml->parse("directory/filename.xml"); $xml->parseString($someString); */ class xmlClass{ //xml var $xml; var $path; var $tagName; var $xmlstring; //counter var $index = 0; function xmlClass(){ $this->xml = xml_parser_create(); xml_set_object($this->xml,$this); xml_set_character_data_handler($this->xml, 'dataHandler'); xml_set_element_handler($this->xml, "startHandler", "endHandler"); } function parse($path){ $this->path = $path; if (!($fp = fopen($this->path, "r"))) { die("Cannot open XML data file: $file"); return false; } while ($data = fread($fp, 4096)) { if (!xml_parse($this->xml, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->xml)), xml_get_current_line_number($this->xml))); xml_parser_free($this->xml); } } return true; } function parseString($string){ $this->xmlstring = $string; $data = $this->xmlstring; if (!xml_parse($this->xml, $data)) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->xml)), xml_get_current_line_number($this->xml))); xml_parser_free($this->xml); } return true; } function startHandler($parser, $name, $attribs){ //add your commands here echo "$name
"; $this->tagName = ""; } }
"; echo "$attribs
"; } function dataHandler($parser, $data){ //add your commands here echo "$data
"; } function endHandler($parser, $name){ echo "