Wszystko zależy od tego, jak duża jest jednostka pracy, ale myślę, że próbujesz traktować każdy <product/>
węzeł po kolei.
W tym celu najprostszym sposobem byłoby użycie XMLReader, aby dostać się do każdego węzła, a następnie użyć SimpleXML, aby uzyskać do nich dostęp. W ten sposób utrzymujesz niskie zużycie pamięci, ponieważ przetwarzasz jeden węzeł na raz i nadal korzystasz z łatwości użytkowania SimpleXML. Na przykład:
$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');
}
Szybki przegląd zalet i wad różnych podejść:
Tylko XMLReader
Zalety: szybki, zużywa mało pamięci
Wady: zbyt trudne do napisania i debugowania, wymaga dużej ilości kodu w przestrzeni użytkownika, aby zrobić cokolwiek pożytecznego. Kod obszaru użytkownika jest powolny i podatny na błędy. Dodatkowo pozostawia ci więcej linii kodu do utrzymania
XMLReader + SimpleXML
Zalety: nie zajmuje dużo pamięci (tylko pamięć potrzebna do przetworzenia jednego węzła), a SimpleXML jest, jak sama nazwa wskazuje, naprawdę łatwy w użyciu.
Wady: tworzenie obiektu SimpleXMLElement dla każdego węzła nie jest zbyt szybkie. Naprawdę musisz to porównać, aby zrozumieć, czy to dla ciebie problem. Jednak nawet skromna maszyna byłaby w stanie przetworzyć tysiąc węzłów na sekundę.
XMLReader + DOM
Zalety: zużywa mniej więcej tyle pamięci co SimpleXML, a XMLReader :: expand () jest szybsze niż tworzenie nowego elementu SimpleXMLE. Chciałbym, żeby było to możliwe, simplexml_import_dom()
ale w tym przypadku wydaje się, że nie działa
Wady: praca z DOM jest irytująca. Jest w połowie drogi między XMLReader i SimpleXML. Nie tak skomplikowane i niewygodne jak XMLReader, ale lata świetlne od pracy z SimpleXML.
Moja rada: napisz prototyp za pomocą SimpleXML, sprawdź, czy zadziała. Jeśli najważniejsza jest wydajność, wypróbuj DOM. Trzymaj się jak najdalej od XMLReadera. Pamiętaj, że im więcej napiszesz kodu, tym większe prawdopodobieństwo wprowadzenia błędów lub regresji wydajności.