xml_obj = xml_parser_create("ISO-8859-1"); xml_set_object($this->xml_obj,$this); xml_set_character_data_handler($this->xml_obj, 'dataHandler'); xml_set_element_handler($this->xml_obj, "startHandler", "endHandler"); } function parse($path){ if (!($fp = fopen($path, "r"))) { //echo "Cannot open XML data file: $path"; return false; } $lineas = file($path); $tdata = ""; foreach ($lineas as $linea_num => $linea) { if(strpos($linea, "CDATA")===false){ $pos1a = strpos($linea, "<"); $pos1c = strrpos($linea, ">"); $pos2a = strrpos($linea, "<"); $pos2c = strpos($linea, ">"); if($pos1a!=$pos2a){ $linea = substr_replace ($linea, '><',$pos2a, 1); } } $tdata .= $linea; } // while ($data = fread($fp, 4096)) { if (!xml_parse($this->xml_obj, $tdata, feof($fp))) { echo(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->xml_obj)), xml_get_current_line_number($this->xml_obj))); xml_parser_free($this->xml_obj); } //} return true; } function startHandler($parser, $name, $attribs){ $_content = array('nombre' => $name); if(!empty($attribs)) $_content['attrs'] = $attribs; array_push($this->output, $_content); } function dataHandler($parser, $dato){ if(!empty($dato)) { $_output_idx = count($this->output) - 1; $this->output[$_output_idx]['txt'] = $dato; } } function endHandler($parser, $name){ if(count($this->output) > 1) { $_data = array_pop($this->output); $_output_idx = count($this->output) - 1; $this->output[$_output_idx][] = $_data; } } } ?>parse($ruta); $xml = $p->output[0]; $p = null; ?>