Работа с XML в PHP: полное руководство по парсингу и созданию XML-документов

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с XML в PHP: от простого парсинга до создания сложных документов

XML (eXtensible Markup Language) остаётся одним из ключевых форматов для обмена данными, конфигурационных файлов и веб-сервисов (SOAP, RSS/Atom). PHP предоставляет несколько мощных встроенных расширений для работы с XML, которые позволяют решать практически любые задачи — от разбора простых RSS-лент до генерации сложных документов с пространствами имён. В этой статье мы разберём основные инструменты: SimpleXML, DOMDocument и XMLReader, а также научимся создавать XML-документы на лету.

1. SimpleXML — быстрый и удобный парсинг

SimpleXML — это самое простое расширение для работы с XML. Оно преобразует XML-документ в объект, свойства которого можно читать как обычные массивы и объекты. Идеально подходит для небольших и средних документов, когда не требуется сложная навигация.

Загрузка XML из строки или файла

<?php
// Из строки
$xmlString = '<book><title>PHP для начинающих</title><author>Иван Петров</author></book>';
$book = simplexml_load_string($xmlString);

// Из файла
$books = simplexml_load_file('books.xml');

echo $book->title; // PHP для начинающих
echo $book->author; // Иван Петров
?>

Работа с атрибутами и множественными элементами

<?php
$xml = '<library>
    <book id="1">
        <title>PHP Objects</title>
        <author>Matt Zandstra</author>
    </book>
    <book id="2">
        <title>Clean Code</title>
        <author>Robert C. Martin</author>
    </book>
</library>';

$library = simplexml_load_string($xml);

foreach ($library->book as $book) {
    echo 'ID: ' . $book['id'] . ' — ' . $book->title . ' (' . $book->author . ')<br>';
}
// ID: 1 — PHP Objects (Matt Zandstra)
// ID: 2 — Clean Code (Robert C. Martin)
?>

Важно: SimpleXML не поддерживает сложные XPath-запросы с условиями (только простые пути). Для более мощных запросов используйте DOMDocument или XPath.

2. DOMDocument — полный контроль над XML

DOMDocument реализует W3C DOM API и даёт полный контроль над структурой документа. Вы можете добавлять, удалять, изменять любые узлы, работать с пространствами имён и выполнять XPath-запросы любой сложности. Это выбор для профессиональных задач.

Парсинг и навигация с DOMDocument

<?php
$dom = new DOMDocument();
$dom->load('books.xml');

// Получаем все элементы <book>
$books = $dom->getElementsByTagName('book');

foreach ($books as $book) {
    $title = $book->getElementsByTagName('title')->item(0)->nodeValue;
    $author = $book->getElementsByTagName('author')->item(0)->nodeValue;
    echo "Книга: $title, Автор: $author<br>";
}
?>

XPath — мощные запросы к XML

<?php
$dom = new DOMDocument();
$dom->load('library.xml');
$xpath = new DOMXPath($dom);

// Найти все книги с ценой > 500
$expensiveBooks = $xpath->query('//book[price > 500]');

foreach ($expensiveBooks as $book) {
    echo $book->getElementsByTagName('title')->item(0)->nodeValue . ' — ' .
         $book->getElementsByTagName('price')->item(0)->nodeValue . ' руб.<br>';
}
?>

3. Создание XML-документов

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

Создание XML через SimpleXML

<?php
$xml = new SimpleXMLElement('<catalog></catalog>');

$product = $xml->addChild('product');
$product->addChild('name', 'Ноутбук');
$product->addChild('price', 75000);
$product->addAttribute('id', '123');

// Сохраняем в файл
$xml->asXML('catalog.xml');
echo $xml-                    

Рекомендаций