Php робота з xml

Хотілося б докладніше завдання: яка структура документа, наскільки часто буде виконуватися, який сервер, які ресурси ви готові задіяти?

Як вже сказали SimpleXML, DOM або SAX індексують всі в пам'ять і 800 МБ - це не мало. Хоча на сервері з декількома гігабайтами оперативної пам'яті і при нечастому запиті даного функціоналу я б так зробив і не мучився, в будь-якому випадку обробка 800 МБ - це не проста операція.

Є купа парсеров, які нічого не індексують, а проходяться по файлу регулярки, я пробував використовувати XMLReader, але у мене він дуже сильно гальмує, навіть після оптимізації і завантаження шматків в SimpleXML, цей варіант в продакшин так і не пішов.

У підсумку я написав свій парсер, який Новомосковскл файли послідовно, посимвольний, створюючи блоки безпосередньо «ітемов» які вже вантажив в SimpleXML і потім обробляв. Я вважаю цей варіант єдиний робочий для великих файлів, а інструменти на зразок XMLReader для дуже вузьких завдань, хоча не виключаю, що я «просто не вмію їх готувати».

Такий мій досвід, абсолютно не претендую на повноту знань, але це реально працюючий варіант.

SAX теж не завантажує весь документ в пам'ять - Новомосковскет невеликими шматками і викликає різні події при виявленні об'єктів (початку / кінця вузла, атрибутів, і т.д. і т.п.). XMLReader кілька більш зручна альтернава SAX-у, тому що наприклад, дозволяє пропускати непотрібні вузли (наприклад, пропустити вузол і всіх його дітей).

Значить можна використовувати їх, замість свого парсеру, якщо вийде налаштувати потрібним чином, я вже не пам'ятаю подробиць, але у мене не вийшло.

Схожі статті