Каков самый быстрый XML-парсер в PHP?

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

Кроме того, было бы неплохо, чтобы анализатор мог принимать XML-строку в качестве входных данных – у меня есть своя реализация поточно-безопасной работы с файлами, и я не хочу, чтобы некоторые неприятные библиотеки, не содержащие потоки, делали мои усилия бесполезными.

Solutions Collecting From Web of "Каков самый быстрый XML-парсер в PHP?"

Самый быстрый парсер будет SAX – ему не нужно создавать dom, и это можно сделать с помощью частичного xml или постепенно. Информацию о парсере PHP SAX (Expat) можно найти здесь . В качестве альтернативы существует парсер DOM на основе libxml с именем SimpleXML . Парсер, основанный на DOM, будет легче работать, но, как правило, на несколько порядков медленнее.

** Это ориентировано прежде всего на те, которые начинаются с XML Parsing и не уверены, какой парсер использовать.

Существует два «больших» способа разбора – вы можете загрузить XML в память и найти то, что вам нужно (DOM, SimpleXML), или вы можете передать его, – прочитайте его и выполните код на основе прочитанного (XMLReader, SAX ).

Согласно Microsoft , SAX – это синтаксический анализатор, который отправляет каждую информацию в ваше приложение, и ваше приложение обрабатывает его. SimpleXML – это синтаксический анализатор, который позволяет вам пропускать фрагменты данных и получать только то, что вам нужно. По мнению Microsoft, это может упростить и ускорить ваше приложение, и я бы предположил, что реализация .NET и PHP аналогична. Я полагаю, что ваш выбор будет зависеть от ваших потребностей – если вы вытаскиваете только несколько тегов из большего фрагмента и можете использовать $xml->next('Element') чтобы пропустить значительные фрагменты, вы можете обнаружить, что XMLReader быстрее чем SAX.

Разбор «малых» (<30kb, 700 строк) файлов XML повторяется, вы не можете ожидать, что между методами разбора будет огромная разница во времени. Я был удивлен, обнаружив, что это было. Я провел сравнение небольшого фида, обработанного в SimpleXML и XMLReader. Надеюсь, это поможет кому-то еще понять, насколько важны эти данные. Для сравнения реальной жизни это анализирует ответ на два запроса на подачу информации о продукции Amazon MWS.

Каждое время анализа времени – это время, необходимое для принятия 2 строк XML и возврата около 120 переменных, содержащих значения из каждой строки. Каждый цикл принимает разные данные, но каждый из тестов был на одних и тех же данных в том же порядке.

SimpleXML загружает документ в память. Я использовал microtime, чтобы проверить время, необходимое для завершения анализа (извлечь соответствующие значения), а также время, затрачиваемое на создание элемента (когда был вызван new SimpleXMLElement($xml) ). Я округлил их до 4 знаков после запятой.

 Parse Time: 0.5866 seconds Parse Time: 0.3045 seconds Parse Time: 0.1037 seconds Parse Time: 0.0151 seconds Parse Time: 0.0282 seconds Parse Time: 0.0622 seconds Parse Time: 0.7756 seconds Parse Time: 0.2439 seconds Parse Time: 0.0806 seconds Parse Time: 0.0696 seconds Parse Time: 0.0218 seconds Parse Time: 0.0542 seconds __________________________ 2.3500 seconds 0.1958 seconds average Time Spent Making the Elements: 0.5232 seconds Time Spent Making the Elements: 0.2974 seconds Time Spent Making the Elements: 0.0980 seconds Time Spent Making the Elements: 0.0097 seconds Time Spent Making the Elements: 0.0231 seconds Time Spent Making the Elements: 0.0091 seconds Time Spent Making the Elements: 0.7190 seconds Time Spent Making the Elements: 0.2410 seconds Time Spent Making the Elements: 0.0765 seconds Time Spent Making the Elements: 0.0637 seconds Time Spent Making the Elements: 0.0081 seconds Time Spent Making the Elements: 0.0507 seconds ______________________________________________ 2.1195 seconds 0.1766 seconds average over 90% of the total time is spent loading elements into the DOM. Only 0.2305 seconds is spent locating the elements and returning them. 

В то время как XMLReader, основанный на потоке, я смог пропустить значительную часть одного из XML-каналов, поскольку нужные мне данные были близкими к вершине каждого элемента. «Ваш пробег может измениться».

 Parse Time: 0.1059 seconds Parse Time: 0.0169 seconds Parse Time: 0.0214 seconds Parse Time: 0.0665 seconds Parse Time: 0.0255 seconds Parse Time: 0.0241 seconds Parse Time: 0.0234 seconds Parse Time: 0.0225 seconds Parse Time: 0.0183 seconds Parse Time: 0.0202 seconds Parse Time: 0.0245 seconds Parse Time: 0.0205 seconds __________________________ 0.3897 seconds 0.0325 seconds average 

Что поразительно, так это то, что, хотя элементы локализации немного быстрее в SimpleXML, когда он загружен, на самом деле в 6 раз быстрее использовать XMLReader в целом.

Вы можете найти некоторую информацию об использовании XMLReader в разделе Как использовать XMLReader в PHP?

Каждое расширение XML имеет свои сильные и слабые стороны. Например, у меня есть скрипт, который анализирует дамп данных XML из Stack Overflow. Файл posts.xml составляет 2,8 ГБ! Для этого большого XML-файла мне пришлось использовать XMLReader потому что он читает XML в потоковом режиме, вместо того, чтобы пытаться загружать и представлять весь XML-документ в памяти сразу, как это делает расширение DOM.

Поэтому вам нужно более подробно описать, как вы собираетесь использовать XML, чтобы решить, какое расширение PHP использовать.

Все PHP-расширения PHP предоставляют некоторый метод для чтения XML-данных в виде строки.

В PHP не так много парсеров.

Наиболее эффективными будут те, которые предоставляются PHP, пишут тесты с DOM и SimpleXML и проверяют, какая из них работает лучше.