Работа с XML в PHP: парсинг, создание и обработка данных

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

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

Начать курс

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

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