Какой XML-парсер вы используете для PHP? - PullRequest
3 голосов
/ 16 сентября 2008

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

Ответы [ 5 ]

4 голосов
/ 16 сентября 2008

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

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

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

3 голосов
/ 16 сентября 2008

SimpleXML , кажется, делает хорошую работу для меня.

2 голосов
/ 17 сентября 2008

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 (-2 МБ), поскольку DOM / SimpleXML помещают весь документ в память с некоторыми дополнительными издержками (например, x2 или x3). Для больших кусков XML (+ 2 МБ) вы захотите использовать XMLReader / XMLWriter для анализа стиля SAX с небольшим объемом памяти. Я успешно использовал документы размером более 14 МБ с XMLReader / XMLWriter.

1 голос
/ 16 сентября 2008

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

В IBM developerWorks есть очень хорошая серия из трех статей под названием " XML для разработчиков PHP ".

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

0 голосов
/ 16 сентября 2008

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

http://www.php.net/simplexml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...