Subversion-Projekte lars-tiefland.content-management

Revision

Blame | Letzte Änderung | Log anzeigen | RSS feed

<?
/* ###################################################################################*/
/* ## Super Duper XMLParser                                                                                                                     ##*/
/* ###################################################################################*/

class XMLParser { 
   var $path; 
   var $result; 

   function XMLParser($encoding, $data) { 
       $this->path = "\$this->result"; 
       $this->index = 0; 
       
       $xml_parser = xml_parser_create($encoding);
           xml_parser_set_option( $xml_parser, XML_OPTION_CASE_FOLDING, FALSE);
           xml_parser_set_option( $xml_parser, XML_OPTION_SKIP_WHITE, TRUE);

       xml_set_object($xml_parser, &$this); 
       xml_set_element_handler($xml_parser, 'startElement', 'endElement'); 
       xml_set_character_data_handler($xml_parser, 'characterData'); 

       xml_parse($xml_parser, $data, true); 
       xml_parser_free($xml_parser); 
   } 
   
       function startElement($parser, $tag, $attributeList) { 
           eval("\$vars = get_object_vars(".$this->path.");"); 
           $this->path .= "->".$tag; 
           if ($vars and array_key_exists($tag, $vars)) { 
                 eval("\$data = ".$this->path.";"); 
                     if (is_array($data)) { 
                           $index = sizeof($data); 
                           $this->path .= "[".$index."]"; 
                     } else if (is_object($data)) { 
                           eval($this->path." = array(".$this->path.");"); 
                           $this->path .= "[1]"; 
                     } 
           } 
           eval($this->path." = null;"); 

           foreach($attributeList as $name => $value) 
               eval($this->path."->".$name. " = '".XMLParser::cleanString($value)."';"); 
       } 
   
   function endElement($parser, $tag) { 
       $this->path = substr($this->path, 0, strrpos($this->path, "->")); 
   } 
   
   function characterData($parser, $data) { 
       eval($this->path." = '".trim($data)."';"); 
   } 
} 
?>