Конвертер XML ↔ JSON
XML у JSON з атрибутами як @attr і назад. Для RSS, SOAP-відповідей і старих інтеграцій.
Перекладає між двома форматами, які не мають прямого відповідника
RSS-стрічка, відповідь SOAP, вивантаження зі старої системи: усе це XML, а обробляти зручніше як JSON. Конвертер перекладає структуру, зберігаючи атрибути з префіксом @, і збирає XML із JSON, коли треба сформувати запит до такої системи.
Найкоротший шлях від XML до масиву в PHP це simplexml_load_string і json_encode: SimpleXML сам знає, як віддати себе в JSON. Атрибути при цьому опиняються під ключем @attributes, а порожні елементи стають порожніми масивами, тому для складних документів краще DOMDocument і явний обхід.
$xml = simplexml_load_string($body, 'SimpleXMLElement', LIBXML_NOCDATA);
$data = json_decode(json_encode($xml), true);
// ['channel' => ['item' => [['title' => '…', '@attributes' => ['id' => '427']], …]]]
// назад:
$doc = new SimpleXMLElement('<jobs/>');
$job = $doc->addChild('job');
$job->addAttribute('id', '427');
$job->addChild('title', 'Senior PHP Developer');
echo $doc->asXML();
Що питають про цей інструмент
У JSON немає атрибутів, тому вони стають ключами з префіксом @: <job id="427"> перетворюється на {"job": {"@id": "427"}}. Текст елемента, який має атрибути, кладеться в ключ #text. Це поширена конвенція, її ж використовує fast-xml-parser і більшість конвертерів.
XML не відрізняє «список з одного елемента» від «один елемент». Конвертер робить масив лише коли елементів кілька. Якщо ваша структура завжди список, обробляйте обидва випадки в коді або примусово загортайте в масив.
SimpleXML для невеликих документів і швидкого доступу через властивості, DOMDocument для повного контролю, XMLReader для файлів на сотні мегабайт, бо він читає потоково. І завжди вимикайте зовнішні сутності: з PHP 8 це зроблено за замовчуванням, у старіших версіях потрібен libxml_disable_entity_loader.