Работа с XML в PHP: Полное руководство для разработчиков
XML (eXtensible Markup Language) остаётся одним из ключевых форматов для обмена данными, конфигурации приложений и интеграции с внешними сервисами. PHP предоставляет несколько мощных инструментов для работы с XML, каждый из которых подходит для разных сценариев. В этой статье мы подробно разберём основные библиотеки и подходы, используемые в современной PHP-разработке.
Основные инструменты PHP для работы с XML
В PHP существует три основных расширения для работы с XML, каждое из которых имеет свои особенности и области применения:
- SimpleXML — простой и интуитивно понятный парсер для чтения XML. Идеален для небольших файлов и быстрой обработки.
- DOMDocument — полноценная реализация W3C DOM для работы с XML-документами. Поддерживает чтение, запись, модификацию и валидацию.
- XMLReader / XMLWriter — потоковые парсеры для работы с большими XML-файлами (сотни мегабайт и гигабайты).
1. SimpleXML — быстрый старт
SimpleXML позволяет преобразовать XML-строку или файл в объект, с которым можно работать как с обычным массивом или объектом. Это самый популярный выбор для простых задач.
<?php
// Чтение XML из строки
$xmlString = '<books>
<book id="1">
<title>PHP для начинающих</title>
<author>Иван Петров</author>
<price currency="RUB">1500</price>
</book>
<book id="2">
<title>XML в деталях</title>
<author>Анна Смирнова</author>
<price currency="RUB">2000</price>
</book>
</books>';
$xml = simplexml_load_string($xmlString);
// Доступ к данным
foreach ($xml->book as $book) {
echo "ID: " . $book['id'] . "\n";
echo "Название: " . $book->title . "\n";
echo "Автор: " . $book->author . "\n";
echo "Цена: " . $book->price . " " . $book->price['currency'] . "\n\n";
}
// Создание нового XML
$newXml = new SimpleXMLElement('<catalog/>');
$product = $newXml->addChild('product');
$product->addAttribute('sku', 'P001');
$product->addChild('name', 'Ноутбук');
$product->addChild('price', 55000);
echo $newXml->asXML();
?>
2. DOMDocument — полный контроль
DOMDocument предоставляет полный доступ к Document Object Model. Вы можете создавать, изменять и удалять любые узлы, а также выполнять XPath-запросы для поиска данных.
<?php
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true;
// Создание корневого элемента
$root = $dom->createElement('employees');
$dom->appendChild($root);
// Добавление сотрудника
$employee = $dom->createElement('employee');
$employee->setAttribute('id', '101');
$name = $dom->createElement('name', 'Алексей Кузнецов');
$employee->appendChild($name);
$position = $dom->createElement('position', 'Разработчик');
$employee->appendChild($position);
$root->appendChild($employee);
// XPath запрос
$xpath = new DOMXPath($dom);
$query = "//employee[@id='101']/name";
$result = $xpath->query($query);
if ($result->length > 0) {
echo "Найден: " . $result->item(0)->nodeValue;
}
// Сохранение в файл
$dom->save('employees.xml');
?>
3. XMLReader и XMLWriter — для больших данных
Когда XML-файлы становятся слишком большими для загрузки в память (более 10-50 МБ), на помощь приходят потоковые парсеры. XMLReader читает документ узел за узлом, а XMLWriter создаёт XML по частям.
<?php
// Чтение большого XML-файла
$reader = new XMLReader();
$reader->open('large_data.xml');
while ($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT && $reader->localName == 'record') {
// Обработка каждого элемента record
$recordXml = $reader->readOuterXml();
processRecord($recordXml); Также в библиотеке
Отправка email на JavaScript (Node.js): Nodemailer, SendGrid, Mailgun
Отправка email на Kotlin: библиотеки и примеры кода
gRPC для JavaScript (Node.js): библиотеки, настройка и примеры кода
PDFKit для JavaScript (Node.js): полное руководство с примерами