Все залежить від того, наскільки велика одиниця роботи, але я думаю, ви намагаєтесь обробляти кожен <product/>
вузол послідовно.
Для цього найпростішим способом буде використання XMLReader, щоб дістатися до кожного вузла, а потім використовувати SimpleXML для доступу до них. Таким чином, ви зменшуєте використання пам’яті на низькому рівні, оскільки ви обробляєте по одному вузлу за раз, і ви все ще використовуєте простоту використання SimpleXML. Наприклад:
$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');
}
Короткий огляд плюсів і мінусів різних підходів:
Лише XMLReader
Плюси: швидкий, використовує мало пам'яті
Мінуси: надмірно важко писати та налагоджувати, потрібно багато коду Userland, щоб зробити щось корисне. Код Userland повільний і схильний до помилок. Крім того, це залишає вам більше рядків коду для обслуговування
XMLReader + SimpleXML
Плюси: не використовує багато пам'яті (лише пам'ять, необхідна для обробки одного вузла), а SimpleXML, як випливає з назви, дійсно проста у використанні.
Мінуси: створення об’єкта SimpleXMLElement для кожного вузла не дуже швидке. Ви дійсно повинні порівняти його, щоб зрозуміти, чи це для вас проблема. Навіть скромна машина змогла б обробляти тисячу вузлів в секунду.
XMLReader + DOM
Плюси: використовує приблизно стільки пам'яті, скільки SimpleXML, а XMLReader :: expand () швидше, ніж створення нового елемента SimpleXMLElement. Я хотів би, щоб це можна було використовувати, simplexml_import_dom()
але це, здається, не працює в такому випадку
Мінуси: працювати з DOM дратує. Це на півдорозі між XMLReader та SimpleXML. Не такий складний і незграбний, як XMLReader, але за кілька років від роботи з SimpleXML далеко.
Моя порада: напишіть прототип за допомогою SimpleXML, перевірте, чи він працює для вас. Якщо продуктивність має найбільше значення, спробуйте DOM. Тримайтеся якомога далі від XMLReader. Пам’ятайте, що чим більше коду ви пишете, тим вища можливість вводити помилки або вводити регресії продуктивності.