DOMDocument класс

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

Тренажер PHP

В этом уроке мы разберем DOMDocument — стандартный класс PHP для работы с XML и HTML. Это мощный инструмент, который позволяет не только читать (парсить) структуру документов, но и создавать их с нуля или модифицировать существующие. Наши онлайн уроки помогут вам освоить этот процесс.

DOM (Document Object Model) представляет XML как дерево узлов. Основные методы, которые мы изучим:

  • loadXML($string) — загружает XML из строки.
  • getElementsByTagName($name) — ищет элементы по тегу.
  • createElement($name) — создает новый узел.
  • appendChild($node) — добавляет узел в структуру.
  • saveXML() — возвращает готовый XML в виде строки.

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

Список тем

1. Структура DOM скрипта

id: 39216_dom_01_highlight

В этом задании вам нужно разметить выделенные фрагменты PHP-кода, который демонстрирует работу с классом DOMDocument. Каждый выделенный сегмент относится к одной из трёх ключевых операций: создание объекта класса, загрузка XML-данных или поиск узлов в документе. Выберите для каждого фрагмента подходящий тип из списка: 'Создание объекта', 'Загрузка данных', 'Поиск узлов'.

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
// Инициализация и работа с DOMDocument
{{$dom = new DOMDocument();~|~t1}}
{{$dom->loadXML($xmlString);~|~t2}}
{{$items = $dom->getElementsByTagName('item');~|~t3}}
// ... дальнейшая обработка
Создание объекта
Поиск узлов
Загрузка данных
Сообщения
Проверить
Показать подсказку

2. Выбор методов записи

id: 39216_dom_02_click

Перед вами список методов класса 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. Методы и их назначение

id: 39216_dom_03_compare

Сопоставьте название метода класса DOMDocument с его действием. Класс DOMDocument используется для работы с XML-документами в PHP, и каждый его метод выполняет определённую операцию: чтение данных, запись, поиск элементов или создание новых узлов. В левой колонке указаны названия методов, в правой — их краткое назначение. Установите соответствие между методом и тем, что он делает.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
loadXML
saveXML
getElementsByTagName
createElement
Чтение XML-документа из строки
Поиск элементов по имени тега
Вывод XML-документа в виде строки
Создание нового элемента (тега)
Сообщения
Проверить
Показать подсказку

4. Типы узлов

id: 39216_dom_04_sort

В XML-документе, обрабатываемом с помощью класса DOMDocument в PHP, существуют различные типы узлов. В этом задании вам представлены строки, изображающие части XML-структуры. Распределите их по двум категориям: «Элементы (Tags)» и «Атрибуты». Элементы — это теги, которые могут содержать другие узлы или текст. Атрибуты — это пары «имя=значение» внутри открывающего тега, предоставляющие дополнительную информацию об элементе.

Перетяните элементы в соответствующие блоки
Элементы (Tags)
Атрибуты
<book>
id="123"
</author>
category='fiction'
<price />
lang="en"
<title>
<chapter>
Сообщения
Проверить
Показать подсказку

5. Инициализация и загрузка

id: 39216_dom_06_replace

Дополните фрагмент кода так, чтобы он корректно инициализировал объект 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
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Добавление потомка

id: 39216_dom_07_bank

В данном задании вам нужно восстановить фрагмент кода для работы с 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);
?>
$title
createElement
$book
appendChild
$title
$element
addChild
$doc
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

7. Сборка XML документа

id: 39216_dom_08_sequencing

Перед вами строки 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. Ошибка в имени метода

id: 39216_dom_09_error

В данном фрагменте 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();
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

9. Парсинг списка книг

id: 39216_dom_10_build

Из предложенных строк соберите корректный 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);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

10. Значение узла

id: 39216_dom_11_give_result

В приведённом ниже фрагменте 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

id: 39216_dom_12_chat

В этом задании вы пообщаетесь с виртуальным ассистентом по теме генерации XML-карт сайта (sitemap) с помощью класса DOMDocument в PHP. Бот попросит вас помочь создать sitemap.xml, добавляя элементы и атрибуты согласно спецификации. Вы будете вводить короткие фрагменты кода, имена методов или выбирать правильные варианты. Каждый шаг проверяет понимание работы с DOM для создания XML-структур.

Это визуальная эмуляция чата с заранее подготовленными вопросами и ответами. Введённые вами данные никуда не отправляются и не сохраняются.
Сообщения
Проверить
Показать подсказку

PHP: запуск кода в браузере

id: 39216_compiler
🐘
Запустить тренажёр (PHP)
НайтиКурс.Ру