Tout dépend de l'unité de travail, mais je suppose que vous êtes à essayer de traiter chaque <product/>
des nœuds dans la succession.
Pour cela, le moyen le plus simple serait d'utiliser XMLReader d'obtenir à chaque nœud, puis utiliser SimpleXML pour y accéder. De cette façon, vous gardez l'utilisation de la mémoire faible parce que vous êtes le traitement d'un nœud à un moment et vous avez encore l'effet de levier SimpleXML est la facilité d'utilisation. Par exemple:
$z = new XMLReader;
$z->open('data.xml');
$doc = new DOMDocument;
// move to the first <product /> node
while ($z->read() && $z->name !== 'product');
// now that we're at the right depth, hop to the next <product/> until the end of the tree
while ($z->name === 'product')
{
// either one should work
//$node = new SimpleXMLElement($z->readOuterXML());
$node = simplexml_import_dom($doc->importNode($z->expand(), true));
// now you can use $node without going insane about parsing
var_dump($node->element_1);
// go to next <product />
$z->next('product');
}
Rapide aperçu des avantages et inconvénients des différentes approches:
XMLReader seulement
Avantages: rapide, utilise peu de mémoire
Inconvénients: trop dur à écrire et déboguer, nécessite beaucoup de l'espace utilisateur code pour faire quelque chose d'utile. Userland code est lente et sujette à l'erreur. De Plus, il vous laisse avec plus de lignes de code à maintenir
XMLReader + SimpleXML
Pour: n'utilise pas beaucoup de mémoire (seulement la mémoire nécessaire pour traiter un nœud) et SimpleXML est, comme son nom l'indique, vraiment facile à utiliser.
Inconvénients: la création d'un objet SimpleXMLElement pour chaque nœud n'est pas très rapide. Vous avez vraiment à l'indice de référence pour comprendre si c'est un problème pour vous. Même une modeste machine serait capable de traiter un millier de nœuds par seconde, cependant.
XMLReader + DOM
Avantages: consomme autant de mémoire que SimpleXML, et XMLReader::expand() est plus rapide que de créer un nouveau SimpleXMLElement. Je voudrais qu'il était possible d'utiliser simplexml_import_dom()
, mais il ne semble pas fonctionner dans ce cas
Inconvénients: DOM est gênant de travailler avec. C'est à mi-chemin entre XMLReader et SimpleXML. Pas aussi compliqué et bizarre comme XMLReader, mais à des années-lumière de travail avec SimpleXML.
Mon conseil: écrire un prototype avec SimpleXML, voir si cela fonctionne pour vous. Si le rendement est primordial, essayez DOM. Rester aussi loin de XMLReader que possible. N'oubliez pas que plus le code que vous écrivez, plus la possibilité de vous introduire des bogues ou de l'introduction de la performance des régressions.