В этом уроке мы разберем DOMDocument — стандартный класс PHP для работы с XML и HTML. Это мощный инструмент, который позволяет не только читать (парсить) структуру документов, но и создавать их с нуля или модифицировать существующие. Наши онлайн уроки помогут вам освоить этот процесс.
DOM (Document Object Model) представляет XML как дерево узлов. Основные методы, которые мы изучим:
loadXML($string)— загружает XML из строки.getElementsByTagName($name)— ищет элементы по тегу.createElement($name)— создает новый узел.appendChild($node)— добавляет узел в структуру.saveXML()— возвращает готовый XML в виде строки.
Использование DOMDocument предпочтительнее простых регулярок, так как он корректно обрабатывает вложенность и кодировки. Пройдите наши тесты и практические задания, чтобы закрепить навык разработки парсеров.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Iterator интерфейс
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- IteratorAggregate интерфейс
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Функция htmlspecialchars().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Функция json_encode().
- DOMDocument класс.
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
1. Структура DOM скрипта
В этом задании вам нужно разметить выделенные фрагменты PHP-кода, который демонстрирует работу с классом DOMDocument. Каждый выделенный сегмент относится к одной из трёх ключевых операций: создание объекта класса, загрузка XML-данных или поиск узлов в документе. Выберите для каждого фрагмента подходящий тип из списка: 'Создание объекта', 'Загрузка данных', 'Поиск узлов'.
// Инициализация и работа с DOMDocument
{{$dom = new DOMDocument();~|~t1}}
{{$dom->loadXML($xmlString);~|~t2}}
{{$items = $dom->getElementsByTagName('item');~|~t3}}
// ... дальнейшая обработка2. Выбор методов записи
Перед вами список методов класса DOMDocument. Внимательно изучите перечисленные названия методов. Ваша задача — выбрать (выделить кликом) только те методы, которые предназначены для создания или добавления новых элементов, узлов или атрибутов в XML/HTML-документ. Методы, которые предназначены для поиска, сохранения, проверки или других операций, не связанных с непосредственным созданием или добавлением, выделять не нужно.
// Методы класса DOMDocument
{{loadXML~|~t1}}
{{createElement~|~t2}}
{{appendChild~|~t3}}
{{getElementsByTagName~|~t4}}
{{saveHTML~|~t5}}
{{createAttribute~|~t6}}
{{validate~|~t7}}
{{createTextNode~|~t8}}
{{createCDATASection~|~t9}}
{{importNode~|~t10}}
{{createComment~|~t11}}
{{saveXML~|~t12}}
{{createProcessingInstruction~|~t13}}
{{loadHTML~|~t14}}
{{createEntityReference~|~t15}}
{{normalizeDocument~|~t16}}3. Методы и их назначение
Сопоставьте название метода класса DOMDocument с его действием. Класс DOMDocument используется для работы с XML-документами в PHP, и каждый его метод выполняет определённую операцию: чтение данных, запись, поиск элементов или создание новых узлов. В левой колонке указаны названия методов, в правой — их краткое назначение. Установите соответствие между методом и тем, что он делает.
loadXMLsaveXMLgetElementsByTagNamecreateElement4. Типы узлов
В XML-документе, обрабатываемом с помощью класса DOMDocument в PHP, существуют различные типы узлов. В этом задании вам представлены строки, изображающие части XML-структуры. Распределите их по двум категориям: «Элементы (Tags)» и «Атрибуты». Элементы — это теги, которые могут содержать другие узлы или текст. Атрибуты — это пары «имя=значение» внутри открывающего тега, предоставляющие дополнительную информацию об элементе.
5. Инициализация и загрузка
Дополните фрагмент кода так, чтобы он корректно инициализировал объект DOMDocument и загружал в него XML-строку. Это базовое упражнение по работе с классом DOMDocument в PHP. Вам нужно вставить недостающие имена класса и метода, чтобы код создавал новый объект и парсил XML из строки. Обратите внимание на синтаксис создания объектов и вызова методов в PHP.
<?php
$xmlString = '<?xml version="1.0"?><root><item>Test</item></root>';
$dom = new input1S();
$dom->input2S($xmlString);
// Далее можно работать с загруженным XML через объект $dom
?>6. Добавление потомка
В данном задании вам нужно восстановить фрагмент кода для работы с DOMDocument в PHP. Для добавления элемента в структуру XML/HTML используется метод appendChild(). Ваша задача — правильно подобрать переменные из банка, чтобы создать элемент 'title' и добавить его как потомка к элементу 'book'. Обратите внимание на порядок и имена переменных, используемых в функции.
<?php
$doc = new DOMDocument();
// Создаём элемент 'book'
$book = $doc->createElement('book');
$doc->appendChild($book);
// Создаём элемент 'title'
input1S = $doc->input2S('title');
// Добавляем созданный элемент 'title' в 'book'
input3S->input4S(input5S);
?>7. Сборка XML документа
Перед вами строки PHP-кода, перемешанные в случайном порядке. Все они относятся к созданию простого XML-документа с помощью класса DOMDocument. Расставьте строки в правильной логической последовательности, чтобы получить рабочий скрипт, который создаст XML-документ с корневым элементом 'root' и выведет его строковое представление. Правильный порядок должен соответствовать последовательности: 1. Создание объекта DOMDocument, 2. Создание корневого элемента, 3. Добавление корневого элемента к документу, 4. Генерация и вывод XML.
<?php$dom->appendChild($root);$root = $dom->createElement('root');$dom = new DOMDocument('1.0', 'UTF-8');?>echo $dom->saveXML();8. Ошибка в имени метода
В данном фрагменте PHP-кода для работы с XML допущена ошибка в использовании метода DOMDocument. Программа должна создать XML-элемент и загрузить XML-строку, но из-за неправильного имени метода возникает проблема. Найдите строку с ошибкой и исправьте её, чтобы код корректно создал XML-документ и элемент.
<?php$xmlString = '<?xml version="1.0" encoding="UTF-8"?><root></root>';$dom = new DOMDocument();$dom->loadHTML($xmlString); // Ошибка в имени метода$element = $dom->createElementXML('book', 'PHP Guide'); // Ошибка в имени метода$dom->documentElement->appendChild($element);echo $dom->saveXML();?>9. Парсинг списка книг
Из предложенных строк соберите корректный PHP-скрипт, который использует класс DOMDocument для парсинга XML и выводит названия книг. Сценарий: цикл foreach должен перебирать результат вызова метода getElementsByTagName('book') и для каждого элемента выводить его текстовое содержимое (nodeValue). В решении должны присутствовать ключевые строки, связанные с созданием объекта, загрузкой XML, получением коллекции элементов и их обработкой в цикле. Некоторые строки являются лишними и не должны включаться в итоговое решение.
$xml = '<?xml version="1.0"?>\n<books>\n <book>PHP Basics</book>\n <book>Advanced XML</book>\n</books>';$dom = new DOMDocument();$dom->loadXML($xml);$books = $dom->getElementsByTagName('book');foreach ($books as $book) { echo $book->nodeValue . "\n";}$books = $dom->getElementsByTagName('author');while ($book = $books->item(0)) { print_r($book);10. Значение узла
В приведённом ниже фрагменте PHP-кода с использованием класса DOMDocument производится разбор XML-строки. Код получает значение атрибута 'currency' у первого элемента 'price'. Проанализируйте код и определите, какое именно значение будет выведено на экран с помощью echo. Введите это значение в поле ответа (одно слово).
<?php
$xmlString = '<?xml version="1.0" encoding="UTF-8"?>
<products>
<product id="1">
<name>Laptop</name>
<price currency="USD">999</price>
</product>
</products>';
$dom = new DOMDocument();
$dom->loadXML($xmlString);
$priceNodes = $dom->getElementsByTagName('price');
if ($priceNodes->length > 0) {
$firstPrice = $priceNodes->item(0);
$currency = $firstPrice->getAttribute('currency');
echo $currency;
}
?>11. Генерация Sitemap
В этом задании вы пообщаетесь с виртуальным ассистентом по теме генерации XML-карт сайта (sitemap) с помощью класса DOMDocument в PHP. Бот попросит вас помочь создать sitemap.xml, добавляя элементы и атрибуты согласно спецификации. Вы будете вводить короткие фрагменты кода, имена методов или выбирать правильные варианты. Каждый шаг проверяет понимание работы с DOM для создания XML-структур.