Register now and start sharing your code snippets.
-->
A simple and easy to use PHP XML parser
PHP posted 9 months ago by christian
The PHP XML parser:
1 class XML 2 { 3 static function parse($data, $handler, $encoding = "UTF-8") 4 { 5 $parser = xml_parser_create($encoding); 6 7 xml_set_object($parser, $handler); 8 9 xml_set_element_handler($parser, 10 array(&$handler, 'start'), 11 array(&$handler, 'end') 12 ); 13 14 xml_set_character_data_handler( 15 $parser, 16 array($handler, 'content') 17 ); 18 19 $result = xml_parse($parser, $data); 20 21 if(!$result) 22 { 23 $error_string = xml_error_string(xml_get_error_code($parser)); 24 $error_line = xml_get_current_line_number($parser); 25 $error_column = xml_get_current_column_number($parser); 26 27 $message = sprintf("XML error '%s' at line %d column %d", $error_string, $error_line, $error_column); 28 29 throw new Exception($message); 30 } 31 32 xml_parser_free($parser); 33 } 34 }
A result handler:
1 class ResultHandler 2 { 3 var $tag; 4 5 function start ($parser, $tagName, $attributes = null) 6 { 7 echo "start"; 8 $this->tag .= $tagName; # Use .= to work around bug... 9 } 10 11 function end ($parser, $tagName) 12 { 13 echo "end"; 14 $this->tag = null; 15 16 } 17 18 function content ($parser, $content) 19 { 20 echo "$this->tag: $content" ; 21 } 22 }
Then in your code:
1 $xml = "<a>bah</a>"; 2 XML::parse($xml, new ResultHandler());
Note that HTML /XML entities are considered to be tags by PHP ’s XML parser, so your start tag handler will be called three times for this tag, once for “really”, once for “&” and once for ” bad parser”:
1 <data>really & bad parser</data>
I guess this is a bug… You can