Как преобразовать массив в SimpleXML в PHP

Опубликовано: 4 Февраля, 2022

Часто бывает необходимо сохранить данные в формате XML в базе данных или в файле для последующего использования. Для выполнения этого требования необходимо преобразовать данные в XML и сохранить файл XML.

Функции расширения SimpleXML предоставляют набор инструментов для преобразования XML в объект. Эти объекты имеют дело с обычными селекторами свойств и итераторами массивов.

Example 1:

<?php
// Code to convert php array to xml document
  
// Define a function that converts array to xml.
function arrayToXml($array, $rootElement = null, $xml = null) {
    $_xml = $xml;
      
    // If there is no Root Element then insert root
    if ($_xml === null) {
        $_xml = new SimpleXMLElement($rootElement !== null ? $rootElement : "<root/>");
    }
      
    // Visit all key value pair
    foreach ($array as $k => $v) {
          
        // If there is nested array then
        if (is_array($v)) { 
              
            // Call function for nested array
            arrayToXml($v, $k, $_xml->addChild($k));
            }
              
        else {
              
            // Simply add child element. 
            $_xml->addChild($k, $v);
        }
    }
      
    return $_xml->asXML();
}
  
// Creating an array for demo
$my_array = array (
"name" => "GFG",
"subject" => "CS",
  
    // Creating nested array.
    "contact_info" => array (
    "city" => "Noida",
    "state" => "UP",
    "email" => "feedback@geeksforgeeks.org"
    ),
);
  
// Calling arrayToxml Function and printing the result
echo arrayToXml($my_array);
?>

Выход:

<? xml version = "1.0"?>
<корень>
    <name> GFG </name>
    <subject> CS </subject>
    <contact_info>
        <город> Нойда </ city>
        <состояние> ВВЕРХ </ состояние>
        <электронная почта> feedback@geeksforgeeks.org </email>
    <contact_info>
<корень>

Вышеуказанная проблема может быть решена с помощью функции array_walk_recursive (). Эта функция преобразует массив в XML-документ, где ключи массива преобразуются в значения, а значения массива преобразуются в элемент xml.

Example 2:

<?php
// Code to convert php array to xml document
  
// Creating an array
$my_array = array (
    "a" => "x",
    "b" => "y",
      
    // creating nested array
    "another_array" => array (
        "c" => "z",
    ),
);
  
// This function create a xml object with element root.
$xml = new SimpleXMLElement("<root/>");
  
// This function resursively added element
// of array to xml document
array_walk_recursive($my_array, array ($xml, "addChild"));
  
// This function prints xml document.
print $xml->asXML();
?>

Выход:

<? xml version = "1.0"? >
<корень>
       <x> а </ x>
       <y> б </ y>
       <z> c </ z>
</ корень>

Примечание. Если система генерирует ошибку типа: Неустранимая ошибка PHP: Неперехваченная ошибка: Класс SimpleXMLElement не найден в /home/6bc5567266b35ae3e76d84307e5bdc78.php:24, тогда просто установите пакеты php-xml, php-simplexml.