Лучший способ обработать большой XML в PHP [дубликат]

Вы уже взглянули на это? https://docs.aws.amazon.com/sns/latest/dg/sns-large-payload-raw-message-delivery.html

Если вы считаете, что файл может увеличить время я предлагаю другой подход.

Поместите файл в корзину S3 и прикрепите уведомление о событии S3 к SNSTopic, чтобы все потребители были уведомлены о готовности нового файла к обработке. Другими словами, сообщением SNS будет местоположение файла, а не сам файл. Подумай об этом.

27
задан Jon Seigel 14 March 2010 в 19:57
поделиться

5 ответов

Для большого файла вы захотите использовать парсер SAX , а не парсер DOM.

С парсером DOM он будет читать весь файл и загружать это в дерево объектов в памяти. С парсером SAX он будет последовательно читать файл и вызывать ваши пользовательские функции обратного вызова для обработки данных (начальные теги, конечные теги, CDATA и т. Д.).

С парсером SAX вам нужно будет самостоятельно поддерживать состояние (например, в каком теге вы сейчас находитесь), что немного усложняет задачу, но для большого файла это будет намного эффективнее с точки зрения памяти.

22
ответ дан 28 November 2019 в 05:04
поделиться

Мне нужно было проанализировать большой XML-файл, в котором в каждой строке содержался элемент (дамп данных StackOverflow). В этом конкретном случае было достаточно прочитать файл по одной строке за раз и проанализировать каждую строку, используя SimpleXML. Для меня это было то преимущество, что не нужно было учить что-то новое.

1
ответ дан Liam 28 November 2019 в 05:04
поделиться

Это действительно зависит от того, что вы хотите делать с данными? Вам нужна вся память для эффективной работы?

6,5 МБ - это не так уж и много для современных компьютеров. Вы могли бы, например, ini_set ('memory_limit', '128M');

Однако, если ваши данные могут быть переданы в потоковом режиме, вы можете использовать парсер SAX . Это действительно зависит от ваших потребностей.

3
ответ дан 28 November 2019 в 05:04
поделиться

Парсер SAX - это то, что вам нужно. Я обнаружил, что синтаксический анализ SAX может стать беспорядочным, если вы не будете организованы.

Я использую подход, основанный на STX (потоковые преобразования для XML), для анализа больших файлов XML. Я использую методы SAX для создания объекта SimpleXML, чтобы отслеживать данные в текущем контексте (т.е. только узлы между корнем и текущим узлом). Затем для обработки документа SimpleXML используются другие функции.

2
ответ дан 28 November 2019 в 05:04
поделиться

Парсер SAX, как рекомендует Эрик Петрелье, лучше подходит для больших файлов XML. Парсер DOM загружает весь XML-файл и позволяет запускать запросы xpath - синтаксический анализатор SAX (простой API для XML) просто читает одну строку за раз и дает вам точки перехвата для обработки.

6
ответ дан 28 November 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: