Работа с 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-