PHP XML парсинг - PullRequest
       44

PHP XML парсинг

6 голосов
/ 04 февраля 2009

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

Ответы [ 5 ]

4 голосов
/ 06 февраля 2009

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

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

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

4 голосов
/ 04 февраля 2009

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

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

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

2 голосов
/ 05 февраля 2009

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

1 голос
/ 05 февраля 2009

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

1 голос
/ 04 февраля 2009

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

...