Мне нравится класс 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 доступен для меня.