2010-09-13 8 views
0

J'ai un grand fichier XML avec 22000 enregistrements que je dois importer dans ma base de données.php grand xml analyse avec pagination

Je cherche comment analyser le xml avec la pagination, ce qui signifie

parse.php?start=0; //this script get the 0-500 firt records of file 
parse.php?start=500 //this script get the 500-1000 records of file 

De cette façon, je peux contourner les problèmes de mémoire.

Mon problème est de savoir comment pointer au niveau record de 500 lorsque la charge du fichier xml

Mon code est simple

$data=simplexml_load_file($xmlFile); 

foreach ($data->product as $product) { 
    foreach($product->children() as $section) { 
     addToDB($section); 
    } 
} 

Le code ci-dessus fonctionne très bien pour 1000-2000 dossiers, mais je veux modifier comme mentionné pour travailler avec de grands fichiers XML

+0

Ceci peut être lié à ce problème: http://bugs.php.net/bug.php?id=38604 – halfdan

Répondre

0

Ce n'est pas possible.

Vous devez utiliser XMLReader pour importer des fichiers volumineux comme décrit dans my blog post.

0

SimpleXML est un analyseur DOM qui signifie qu'il doit charger le document entier en mémoire pour être en mesure de construire une représentation en mémoire de l'ensemble jeu de données XML. Le découpage des données ne fonctionne pas avec ce type d'analyseur.

Pour charger des ensembles de données XML grand, vous devez passer à ce qu'on appelle analyseur de traction * s comme le XMLReader par exemple, ou le très bas niveau XML Parser l'extension. Les analyseurs d'extraction fonctionnent en parcourant l'élément de document XML par élément et vous permettent, au développeur, de réagir en fonction de l'élément actuellement analysé. Cela réduit l'empreinte mémoire car seuls de petits fragments de données doivent être chargés en mémoire à la fois. L'utilisation d'analyseurs par extraction est un peu rare et pas aussi intuitive que les analyseurs DOM familiers (DOM et SimpleXML).