DOMDocument

DOMDocument

    В PHP есть замечательный класс — DOMDocument. В чем же его замечательность? Данный класс изначально предназначался для парсинга XML файлов. Он представляет из себя удобный интерфейс по манипуляции элементами DOM модели. Данный класс можно использовать не только для парсинга XML документов, но и для HTML.    Рассмотрим пример использования его. Допустим мы сделали запрос в поисковик и получили страницу со ссылками на интересующие нас ресурсы. Что нам дальше делать?
1.Инициализируем класс:

$doc = new DOMDocument();

2. Загружаем в класс нашу HTML страничку (@ — ставим для подавления ошибок по некорректным тегам):

$res = @$doc->loadHTML($html);

3. Если файл является корректным, то оператор вернет нам TRUE и тогда мы сможем манипулировать его DOM моделью.

if($res)  {

// Извлекаем из документа все теги - <a>

$tags = $doc->getElementsByTagName('a');

// Перебираем массив полученных элементов тега <a>
foreach (tags  as $a) {

// Проверяем наличие атрибута - href у тега и выводим значение этого атрибута на экран

if($input->hasAttribute('href'))

echo '<br>',$input->getAttribute('href'); 

}

}

Вот собственно и все. Простой инструмент, однако мощный для разбора веб страницы и поиска по DOM модели. Для более корректной работы этого класса с UTF-8, рекомендуется добавлять вначале html страницы: <?xml encoding=»UTF-8″>

Так же у этого класса есть несколько настраиваемых опций:

encoding — Кодировка документа, как она задана в объявлении XML

xmlEncoding — Атрибут задает, равно как и XML объявление, кодировку документа

xmlVersion —   Атрибут задает, равно как и XML объявление, версию документа. Если XML объявления в документе нет, но есть поддержка всех особенностей «XML», значение атрибута принимается равным «1.0»

   Устанавливают их так:


$doc->encoding = "utf-8";
$doc->xmlVersion = "1.0";


    Можно проводить поиск не только по имени тега, но и по ID тега. Для этого используют оператор — getElementById :


// Поиск тега с ID - 'username' и получение его значения
$username=$doc->getElementById('username')->nodeValue;


Более подробно описаны все ее методы можно здесь — официальная страница PHP.

Надеюсь данная статья помогла вам разобраться как парсить HTML документы.


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *