Какой XML-парсер вы используете для PHP?

Мне нравится класс XMLReader для его простоты и скорости. Но мне нравятся связанные с xml_parse функции, так как это лучше позволяет восстанавливать ошибки. Было бы неплохо, если бы класс XMLReader выдавал исключения для таких вещей, как недопустимые сущности, вместо того, чтобы просто выдавать предупреждение.

Я бы избежал SimpleXML, если можно. Хотя это выглядит очень заманчиво, когда вы избегаете много «уродливого» кода, это просто то, что предлагает название: простой. Например, он не может справиться с этим:

<p> Here is <strong>a very simple</strong> XML document. </p> 

Укусите пулю и перейдите к функциям DOM. Сила этого намного перевешивает небольшую дополнительную сложность. Если вы вообще знакомы с манипуляциями DOM в Javascript, вы будете чувствовать себя как дома с этой библиотекой.

Кажется, что SimpleXML подходит для меня.

SimpleXML и DOM работают вместе, поэтому вы можете использовать тот же XML-интерфейс, что и SimpleXML или DOM.

Например:

 $simplexml = simplexml_load_string("<xml></xml>"); $simplexml->simple = "it is simple."; $domxml = dom_import_simplexml($simplexml); $node = $domxml->ownerDocument->createElement("dom", "yes, with DOM too."); $domxml->ownerDocument->firstChild->appendChild($node); echo (string)$simplexml->dom; 

Вы получите результат:

 "yes, with DOM too." 

Потому что, когда вы импортируете объект (либо в simplexml, либо в dom), он использует тот же самый подчеркивающий объект PHP по ссылке.

Я понял это, когда пытался исправить некоторые ошибки в SimpleXML, расширив / завернув объект.

См. http://code.google.com/p/blibrary/source/browse/trunk/classes/bXml.class.inc для примера.

Это действительно хорошо для небольших фрагментов XML (-2MB), поскольку DOM / SimpleXML вытягивает полный документ в память с некоторыми дополнительными накладными расходами (думаю, x2 или x3). Для больших фрагментов XML (+ 2 МБ) вы захотите использовать XMLReader / XMLWriter для разбора SAX-стиля с небольшими издержками памяти. Я успешно использовал документы 14MB + с XMLReader / XMLWriter.

При использовании PHP5 для анализа XML-файлов существует как минимум четыре параметра. Лучший вариант зависит от сложности и размера XML-файла.

В IBM developerWorks есть очень хорошая статья из трех частей, озаглавленная « XML для разработчиков PHP ».

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

Я в основном придерживаюсь SimpleXML, по крайней мере, когда PHP5 доступен для меня.

http://www.php.net/simplexml