Павел Новицкий

Нерегулярные заметки

Инструменты для работы с XML на PHP

26 июля 2014, 1:54

Основывается на ответе со StackOverflow и многочисленных вопросах «какой регуляркой можно...»

Нативные XML расширения

PHP предоставляет достаточно широкий набор доступных из коробки расширений для создания, редактирования и сохранения XML.

DOM
Расширение DOM работает с XML через DOM API. Это реализация W3C’s Document Object Model Core Level 3 — платформенно независимого интерфейса, позволяющего динамически читать и редактировать содержимое, структуру и стили документа. DOM отлично справляется с парсингом и редактированием невалидного HTML, умеет работать с XPath. Работа основана на libxml.

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

XMLReader
Расширение XMLReader — синтаксический анализатор XML. Класс-читатель выступает в качестве курсора, следует по потоку документа и останавливается на каждом узле на этом пути.

SimpleXML
Расширение SimpleXML предоставляет очень простой и легкий в использовании набор инструментов для преобразования XML в объект, с которым можно затем работать через его свойства и с помощью итераторов.

SimpleXML так же хорошо справляется с валидным XHTML кодом. При работе со всякой мешаниной готовьтесь к сюрпризам.

Сторонние библиотеки на основе libxml

phpQuery
Библиотека, работающая на стороне сервера. Основа синтаксиса и селекторов взята из jQuery. Присутствует cli интерфейс.

Zend_Dom
Компонент Zend_Dom предоставляет инструменты для работы с документами и структурами DOM. В настоящее время мы предлагается инструмент Zend_Dom_Query, который дает унифицированный интерфейс для запросов к документам DOM с использованием селекторов XPath и CSS.

QueryPath
PHP библиотека для работы с XML и HTML. Способна работать не только с локальными файлами, но и с вэб-сервисами и базами данных. Синтаксис основывается на интерфейсе jQuery селекторов, в том числе CSS селекторов. Может быть установлен через Composer.

FluentDom
Расширение DOMDocument в виде jQuery-подобного интерфейса для работы с XML. Работает через XPath, а не CSS (заявлена улучшеная производительность). Может быть установлен через Composer.

fDOMDocument
Расширяет DOMDocument. Введены исключения для обработки ошибок вместо стандартных warning и notice сообщений. Добавлены кастомные методы и сокращения для удобства и упрощения работы с DOM

Сторонние библиотеки не основанные на libxml

Основное преимущество работы с DOM/libxml — производительность и доступность прямо из коробки. Но не все библиотеки пошли этим путём. Вот некоторые из них.

SimpleHtmlDom
HTML DOM парсер, написанный на PHP5. Справляется с невалидным HTML кодом. Использует интерфейс jQuery селекторов.

Очень медленный и прожорливый инструмент. Библтиотеки на основе libxml значительно производительней.

Ganon
Универсальный парсер HTML/XML/RSS. Работа с элементами и атрибутами. Справляется с невалидным HTML. Позволяет использовать jQuery селекторы. Своя реализация аналога HTML Tidy, CSS и JS минифаера.

HTML 5

Парсинг в HTML5 от W3.

html5lib
Реализация на питоне и PHP спецификации WHATWG HTML5.

Веб-сервисы

YQL
Yahoo! Query Language (YQL) — SQL-подобный язык запросов. Работает с удалёнными ресурсами в формате HTML, XML, RSS и Atom.

ScraperWiki
Интерфейс для конвертации данных из одного формата в другой для использования на вэбе или в приложении

Регулярные выражения

Последний и наименее рекомендуемый метод работы с HTML — регулярные выражения. Большинство решений сильно зависят от конкретного случая. Малейшие изменения в разметке — лишний пробел, добавление или изменение атрибутов и регулярка уже не работает. Всегда следует подумать дважды прежде чем использовать регулярные выражения. HTML парсеры пишутся с оглядкой на HTML синтаксис. Регулярки же каждый раз придётся подстраивать под конкретную задачу.

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

На ту же тему: Parsing Html The Cthulhu Way

Вконтакте
0 комментариев


Ваш комментарий
(обязательно)
(не показывается)
(HTML не работает)
© 2013-2024