Какой у вас опыт работы с XML в PHP?

«Какой у вас опыт работы с XML в PHP?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В PHP я работал с XML для парсинга конфигураций, обработки данных из внешних API и генерации отчетов. Основные использованные инструменты:

  • SimpleXML — для быстрого чтения и простой навигации по XML-структурам.
  • DOMDocument — когда требовалось создавать сложные документы, модифицировать узлы или валидировать структуру.
  • XPath — для выполнения сложных запросов к XML-документам.

Пример парсинга RSS-ленты с SimpleXML и XPath:

$rss = simplexml_load_file('https://example.com/feed.rss');
// Регистрируем пространство имен, если оно есть
$rss->registerXPathNamespace('dc', 'http://purl.org/dc/elements/1.1/');

// Ищем все заголовки статей, опубликованные за последнюю неделю
$items = $rss->xpath('//item[dc:date > "' . date('c', strtotime('-1 week')) . '"]/title');

foreach ($items as $title) {
    echo (string) $title . "n";
}

Пример создания XML-документа с DOMDocument для экспорта данных:

$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true;

$root = $dom->createElement('users');
$dom->appendChild($root);

$users = [['id' => 1, 'name' => 'Alice'], ['id' => 2, 'name' => 'Bob']];

foreach ($users as $userData) {
    $userElement = $dom->createElement('user');
    $userElement->setAttribute('id', $userData['id']);

    $nameElement = $dom->createElement('name', $userData['name']);
    $userElement->appendChild($nameElement);

    $root->appendChild($userElement);
}

// Валидация по XSD схеме (если она есть)
if ($dom->schemaValidate('schema/users.xsd')) {
    echo $dom->saveXML();
    // или $dom->save('export.xml');
}

Также имел дело с валидацией XML через XSD-схемы и преобразованием XML в другие форматы с помощью XSLT.