Каков наилучший способ анализа 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.
Я начал использовать 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, когда я разрабатываю. Он легко расширяется и методы переписываются, когда это необходимо.