Foros del Web » Programando para Internet » PHP »

Problema al parsear un archivo XML muy grande con PHP

Estas en el tema de Problema al parsear un archivo XML muy grande con PHP en el foro de PHP en Foros del Web. Hola a todos, quiero añadir a mi base de datos el contenido de un archivo xml, hasta ahora lo que hacia era con fopen y ...
  #1 (permalink)  
Antiguo 09/10/2005, 09:59
 
Fecha de Ingreso: septiembre-2005
Mensajes: 70
Antigüedad: 18 años, 7 meses
Puntos: 0
Hola a todos, quiero añadir a mi base de datos el contenido de un archivo xml, hasta ahora lo que hacia era con fopen y fread, leer el archivo, guardar el contenido en un array, y con expresiones regulares obtener el contenido de las etiquetas y añadirlo a mi base de datos.

El problema se me plantea ahora que los archivos que tengo que subir a la BD tienen un tamaño de 30Mb, por lo cual el tema de meterlo en un array se plantea imposible.

¿Alguna idea de como añadir esa cantidad de información a mi base de datos?

Un saludo a todos y gracias por adelantado.

Alguna idea?

Bueno, al fin encontré un codigo que funciona, lo posteo por si a alguien le sirve:

Código PHP:
<?php

$insideitem 
false;
$tag "";
$nombre "";
$descripcion "";
$link "";

function 
startElement($parser$name$attrs) {
    global 
$insideitem$tag$nombre$descripcion$link;
    if (
$insideitem) {
        
$tag $name;
    } elseif (
$name == "ITEM") {
        
$insideitem true;
    }
}

function 
endElement($parser$name) {
    global 
$insideitem$tag$title$description$link;
    if (
$name == "ITEM") {
    
    print 
"    Nombre ->".$nombre."<br />";
    print 
"    Descripcion ->".$descripcion."<br />";
    print 
"    Link ->".$link."<br /><hr />";

        
$nombre "";
        
$descripcion "";
        
$link "";
        
$insideitem false;
    }
}

function 
characterData($parser$data) {
    global 
$insideitem$tag$title$description$link;
    if (
$insideitem) {
        switch (
$tag) {
            case 
"TITLE":
            
$title .= $data;
            break;

            case 
"DESCRIPTION":
            
$descripcion .= $data;
    
            break;
            case 
"LINK":
            
$link .= $data;
            break;
        }
    }
}

$xml_parser xml_parser_create();
xml_set_element_handler($xml_parser"startElement""endElement");
xml_set_character_data_handler($xml_parser"characterData");
$fp fopen($file,"r")
    or die(
"Error reading RSS data.");
while (
$data fread($fp4096))
    
xml_parse($xml_parser$datafeof($fp))
        or die(
sprintf("XML error: %s at line %d"
            
xml_error_string(xml_get_error_code($xml_parser)), 
            
xml_get_current_line_number($xml_parser)));
fclose($fp);
xml_parser_free($xml_parser);

?>
Un saludo

Última edición por GatorV; 06/04/2009 a las 20:22
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 16:51.