Bonjour,

Est-il possible au fur et à mesure de la lecture d'un fichier XML d'utiliser quelque chose comme RemoveChild puis Save pour effacer un noeud d'un fichier xml au fur et à mesure de sa lecture ?

J'utilise XMLReader avec SimpleXMLElement pour analyse des noeuds au fur et à mesure de la lecture du fichier par xmlreader.

Je ne peux pas changer de technique d'analyse car les fichiers que j'analyse font près de 2gb et ferait sauter ma mémoire en ouvrant le fichier d'un coup..

Voici un exemple d'analyse :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
if(file_exists("$file_xml"))
{
$reader = new XMLReader();
$reader->open("$file_xml");
 
$doc = new DOMDocument;
 
while ($reader->read() && $reader->name !== 'PRODUIT');
 
  while( ($reader->name === 'PRODUIT') &&  ($reader->nodeType==XMLReader::ELEMENT) )
  {
     $node = new SimpleXMLElement($reader->readOuterXML());
     $element = $node->element_a_lire;
 
 
    // LA SUPPRESSION DU NOEUD VENANT D'ETRE LU DOIT INTERVENIR ICI
    REMOVE.CHILD $node; ????
  }
 
// LA SAUVEGARDE DOIT INTERVENIR ICI APRES LA FIN DE LA BOUCLE DE LECTURE
$reader->SAVE('$file_xml'); ??
}

Merci pour votre aide.

Guillaume