xml2array geht bei großen files nicht!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • xml2array geht bei großen files nicht!

    Hallo,

    ich nutze folgende Klasse um ein XML in ein Array zu packen.

    Das funktioniert mit kleineren XML-Dateien auch super, aber
    ich habe eine XML-Datei von 10 MB und die macht er mir nicht. Ich bekomm aber auch keiner Fehlermeldung!

    Kann es sein, dass das array nicht soviel speicher packen kann, wenn ja unter welcher einstellung kann ich das ändern. hab bis jetzt nix gefunden!

    danke
    PHP-Code:
    class XmlToArray
    {
        var 
    $xml='';
        
        function 
    XmlToArray($xml)
        {
           
    $this->xml $xml;    
        }
        
        function 
    _struct_to_array($values, &$i)
        {
            
    $child = array(); 
            if (isset(
    $values[$i]['value'])) array_push($child$values[$i]['value']); 
            while (
    $i++ < count($values)) {
                switch (
    $values[$i]['type']) { 
                    case 
    'cdata'
                    
    array_push($child$values[$i]['value']); 
                    break; 
                    case 
    'complete':
                        
    $name $values[$i]['tag']; 
                        if(!empty(
    $name)){
                        
    $child[$name]= ($values[$i]['value'])?($values[$i]['value']):''
                        if(isset(
    $values[$i]['attributes'])) {                    
                            
    $child[$name] = $values[$i]['attributes']; 
                        } 
                    }    
                  break; 
                    case 
    'open'
                        
    $name $values[$i]['tag']; 
                        
    $size = isset($child[$name]) ? sizeof($child[$name]) : 0;
                        
    $child[$name][$size] = $this->_struct_to_array($values$i); 
                    break;
                    case 
    'close':
                    return 
    $child
                    break; 
                }
            }
            return 
    $child
        }
        
        function 
    createArray()
        { 
            
    $xml    $this->xml;
            
    $values = array(); 
            
    $index  = array(); 
            
    $array  = array(); 
            
    $parser xml_parser_create(); 
            
    xml_parser_set_option($parserXML_OPTION_SKIP_WHITE1);
            
    xml_parser_set_option($parserXML_OPTION_CASE_FOLDING0);
            
    xml_parse_into_struct($parser$xml$values$index);
            
    xml_parser_free($parser);
            
    $i 0
            
    $name $values[$i]['tag']; 
            
    $array[$name] = isset($values[$i]['attributes']) ? $values[$i]['attributes'] : ''
            
    $array[$name] = $this->_struct_to_array($values$i); 
            return 
    $array
        }


  • #2
    schau mal in der php.ini nach der
    max_execution_time=60;
    memory_limit=16M

    und erhöhe diese.

    eingendlich solltest du aber eine Fehlermeldung erhalten

    schau mal was unter

    error_reporting = ??

    in deiner php.ini steht
    in meiner test Konfiguration steht da

    error_reporting = E_ALL

    und ob

    display_errors = On

    ist

    sollest du keinen zugriff auf die php.ini haben
    set_time_limit
    ini_set

    error_reporting
    Zuletzt geändert von newphp; 07.06.2007, 10:11.

    Kommentar


    • #3
      und jetzt möchte ich gerne wissen warum du einen grossen Array brauchst?
      Wenn du ein Array bekommst, dann hast du bestimmt mit diesem Array was vor. Wäre es nicht besser, wenn du dein weiteres vorgehen, dass du mit dem Array vorhast direkt in deinem XML(sax)-parser implementierst?

      xml_parse_into_struct ist zwar nete funktion, aber sie ist nicht für grosse Arrays ausgedacht. Der Event-basirenden SAX-Parser, der du benutzt ist eigentlich so ausgedacht, dass man durch einsatz von eigenen funktionen ganz sparsam und eventorientiert die risige Datenmengen abarbeiten kann.
      Slava
      bituniverse.com

      Kommentar

      Lädt...
      X