Es hängt alles davon ab, wie groß die Arbeitseinheit ist, aber ich denke, Sie versuchen, jeden <product/>
Knoten nacheinander zu behandeln .
Der einfachste Weg wäre, XMLReader zu verwenden, um zu jedem Knoten zu gelangen, und dann SimpleXML zu verwenden, um auf sie zuzugreifen. Auf diese Weise halten Sie die Speichernutzung gering, da Sie jeweils nur einen Knoten behandeln und dennoch die Benutzerfreundlichkeit von SimpleXML nutzen. Zum Beispiel:
$z = new XMLReader;
$z->open('data.xml');
$doc = new DOMDocument;
while ($z->read() && $z->name !== 'product');
while ($z->name === 'product')
{
$node = simplexml_import_dom($doc->importNode($z->expand(), true));
var_dump($node->element_1);
$z->next('product');
}
Schneller Überblick über Vor- und Nachteile verschiedener Ansätze:
Nur XMLReader
Vorteile: schnell, verbraucht wenig Speicher
Nachteile: Sehr schwer zu schreiben und zu debuggen, erfordert viel Userland-Code, um irgendetwas Nützliches zu tun. Userland-Code ist langsam und fehleranfällig. Außerdem stehen Ihnen mehr Codezeilen zur Verfügung
XMLReader + SimpleXML
Vorteile: verwendet nicht viel Speicher (nur den Speicher, der für die Verarbeitung eines Knotens benötigt wird) und SimpleXML ist, wie der Name schon sagt, sehr einfach zu verwenden.
Nachteile: Das Erstellen eines SimpleXMLElement-Objekts für jeden Knoten ist nicht sehr schnell. Sie müssen es wirklich vergleichen, um zu verstehen, ob es ein Problem für Sie ist. Selbst eine bescheidene Maschine könnte jedoch tausend Knoten pro Sekunde verarbeiten.
XMLReader + DOM
Vorteile: Verwendet ungefähr so viel Speicher wie SimpleXML, und XMLReader :: expand () ist schneller als das Erstellen eines neuen SimpleXMLElement. Ich wünschte, es wäre möglich zu verwenden, simplexml_import_dom()
aber es scheint in diesem Fall nicht zu funktionieren
Nachteile: Es ist ärgerlich, mit DOM zu arbeiten. Es ist auf halbem Weg zwischen XMLReader und SimpleXML. Nicht so kompliziert und umständlich wie XMLReader, aber Lichtjahre von der Arbeit mit SimpleXML entfernt.
Mein Rat: Schreiben Sie einen Prototyp mit SimpleXML und prüfen Sie, ob er für Sie funktioniert. Wenn die Leistung von größter Bedeutung ist, versuchen Sie es mit DOM. Halten Sie sich so weit wie möglich von XMLReader entfernt. Denken Sie daran, je mehr Code Sie schreiben, desto höher ist die Wahrscheinlichkeit, dass Sie Fehler oder Leistungsregressionen einführen.