Intereting Posts
Разбор Json-ответа с использованием PHP с пробелом в ключе массива Проверка JQuery с несколькими наборами кнопок радиосвязи Изменить .htaccess с помощью PHP загрузка информации о конфигурации в библиотеку Как получить (извлечь) расширение файла в PHP? Как получить список общих друзей Может ли PHP «писать» или «копировать» на удаленном удаленном ресурсе, но не «отключать» или «переименовывать» («Доступ запрещен») Выберите строки в качестве столбцов для сообщения wordpress meta Как получить доступ к атрибуту объекта PHP, имеющему знак доллара? Как получить использование ЦП и использование ОЗУ без exec? Использование временного, вращающегося хэша или строки для обеспечения безопасности Удалить диакритические символы из строки Как я могу легко удалить последнюю запятую из массива? Mod Переписать и передать URL как параметр php driver mongodb, никогда не загружался

PHP-анализ XML

Каков наилучший способ анализа XML-файла в PHP?

Первый
Использование объекта DOM

//code $dom = new DOMDocument(); $dom->load("xml.xml"); $root = $dom->getElementsByTagName("tag"); foreach($root as $tag) { $subChild = $root->getElementsByTagName("child"); // extract values and loop again if needed } 

второй
Использование метода simplexml_load

 // code $xml = simplexml_load_string("xml.xml"); $root = $xml->root; foreach($root as $tag) { $subChild = $tag->child; // extract values and loop again if needed } 

Примечание: Это те два, о которых я знаю. Если больше заполнять.

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

Размер будет варьироваться от 500 КБ до 2 МБ. Парсер должен иметь возможность анализировать как небольшие, так и большие файлы за минимальное время с хорошим использованием памяти, если это возможно.

Это зависит от документа, который вы передаете, но XMLReader обычно быстрее, чем как simplexml, так и DOM ( http://blog.liip.ch/archive/2004/05/10/processing_large_xml_documents_with_php.html ). Лично, хотя я никогда не использовал XMLReader и обычно решил использовать его в зависимости от того, нужно ли мне его редактировать:

  • simplexml, если я просто читаю документ
  • DOM, если я изменяю DOM и сохраняю его обратно

Вы также можете конвертировать объекты между simplexml и DOM.

Я начал использовать XMLReader для анализа XML-файлов. После того, как вы немного поработали в поисковых системах, он обнаружил, что лучше всего разбирать XML-файлы, так как он не загружает весь XML-файл в память. Скажем, если бы мои XML-файлы имели размер 5 МБ, а разбор его с использованием XMLReader 5MB моей памяти не пропал даром.

 //usage $xml = new XMLReader(); $xml->XML($xmlString); while($xml->read) { if($xml->localName == 'Something') // check if tag name equals something { //do something } } в //usage $xml = new XMLReader(); $xml->XML($xmlString); while($xml->read) { if($xml->localName == 'Something') // check if tag name equals something { //do something } } 

Используя XML Reader, мы можем найти, является ли текущий тег открывающим тегом или закрывающим тегом, и при необходимости нужно сделать это.

Если вы обрабатываете огромные файлы, не разбирайте их. Вместо этого применяйте XSLT . Это избавит вас от огромного объема памяти и времени обработки.

Я предпочитаю simplexml_load_string для удобства использования. Скорость обработки может сильно зависеть от формата XML-файла, если они используют разные методы анализа файла – попробуйте в своих файлах и посмотрите, что лучше для вас.

Все XML обрабатывается simpleXML в PHP, когда я разрабатываю. Он легко расширяется и методы переписываются, когда это необходимо.