Преобразование многомерного массива в файл XML в PHP

XML означает расширяемый язык разметки. В этом посте вы узнаете о преобразовании многомерного массива в XML. Это язык разметки, который кодирует документы в машиночитаемом и удобочитаемом формате. XML был разработан для хранения и передачи данных. XML часто используется для распространения данных через Интернет. Вы можете использовать XML многими способами в веб-приложении.

Если вас беспокоит размер базы данных и вы хотите сократить ее использование, XML может помочь вам освободить место в базе данных. Вместо базы данных вы можете хранить данные в файле XML и извлекать данные из файла XML без подключения к базе данных. Карта сайта также генерируется в формате XML.

В этом руководстве мы покажем вам, как преобразовать многомерный или ассоциативный массив PHP в XML-файл, а в примере кода показано, как анализировать XML-файл и преобразовывать XML-данные в массив в PHP. У меня есть двумерный входной массив, содержащий массив пар ключ/элемент.

Для лучшего понимания весь код преобразования массива в XML будет сгруппирован вместе в функции PHP. Функция generateXML() преобразует PHP многомерный массив в XML формат файла. Массив данных необходимо передать в качестве параметра в функцию generateXML().

Эта функция создает XML-документ с использованием класса DOMDocument и вставляет содержимое массива PHP в этот XML-документ. В конце XML-документ сохраняется в виде XML-файла в указанном месте с заданным именем файла.

Многомерный массив

Прежде всего, создайте многомерный массив PHP для преобразования в формат файла XML.

$array = array(
    'department'=> 'Accounts',
    'employe'=> array(
      '0' => array(
        'name' 		=> 'Iron Man',
        'age'		=> '34'
      ),
      '1' => array(
        'name' 		=> 'Black',
        'age'		=> '30'
      ),
      '2' => array(
        'name' 		=> 'Captain',
        'age'		=> '37'
      ),
      '3' => array(
        'name' 		=> 'Loki',
        'age'		=> '35'
      )
    )
  );

Метод генерации XML

Теперь вам нужно создать функцию generateXML().

function generateXML($data) {
    $title = $data['department'];
    $rowCount = count($data['employe']);
    
    //create the xml document
    $xmlDoc = new DOMDocument();
    
    $root = $xmlDoc->appendChild($xmlDoc->createElement("employe_info"));
    $root->appendChild($xmlDoc->createElement("title",$title));
    $root->appendChild($xmlDoc->createElement("totalRows",$rowCount));
    $tabUsers = $root->appendChild($xmlDoc->createElement('rows'));
    
    foreach($data['employe'] as $user){
        if(!empty($user)){
            $tabUser = $tabUsers->appendChild($xmlDoc->createElement('employe'));
            foreach($user as $key=>$val){
                $tabUser->appendChild($xmlDoc->createElement($key, $val));
            }
        }
    }
    
    header("Content-Type: text/plain");
    
    //make the output pretty
    $xmlDoc->formatOutput = true;
    
    //save xml file
    $file_name = str_replace(' ', '_',$title).'.xml';
    $xmlDoc->save($file_name);
    
    //return xml file name
    return $file_name;
}

Вам нужно только использовать функцию generateXML() и передать в нее массив данных, чтобы преобразовать массив в XML в PHP.

generateXML($array);

Код примера создаст ваш многомерный массив в следующем XML-документе с заданным именем файла.

<employe_info>
<title>Accounts</title>
<totalRows>4</totalRows>
<rows>
<employe>
<name>Iron Man</name>
<age>34</age>
</employe>
<employe>
<name>Black</name>
<age>30</age>
</employe>
<employe>
<name>Captain</name>
<age>37</age>
</employe>
<employe>
<name>Loki</name>
<age>35</age>
</employe>
</rows>
</employe_info>

Преобразование XML в ассоциативный массив PHP

Для преобразования XML в ассоциативный массив PHP мы будем использовать несколько следующих шагов.

1. Мы прочитаем данные XML из файла и преобразуем XML в массив с помощью PHP.
2.Прочитайте весь файл в строку, используя функцию file_get_contents() в PHP.
3. Преобразуйте строку XML в объект, используя функцию simplexml_load_string() в PHP.
4. Преобразование объекта в JSON с помощью функции json_encode().
5. Преобразуйте данные JSON в ассоциативный массив, используя функцию json_decode().

Для лучшего способа мы создадим функцию xml_to_array() со всеми этими заданными шагами.

function xml_to_array(){
    //xml file path
    $path = "Accounts.xml";

    //read entire file into string
    $xmlfile = file_get_contents($path);

    //convert xml string into an object
    $xml = simplexml_load_string($xmlfile);

    //convert into json
    $json  = json_encode($xml);

    //convert into associative array
    $array_data = json_decode($json, true);
    
    print_r($array_data);
}

Просто вызовите эту функцию, чтобы преобразовать XML в многомерный массив.

xml_to_array();

Выход

Вывод этой функции будет таким:

arry(
    Convert multidimensional array to XML file in PHP => Accounts
    [totalRows] => 4
    [rows] => Array
        (
            [employe] => Array
                (
                    [0] => Array
                        (
                            [name] => Iron Man
                            [age] => 34
                        )

                    [1] => Array
                        (
                            [name] => Black
                            [age] => 30
                        )

                    [2] => Array
                        (
                            [name] => Captain
                            [age] => 37
                        )

                    [3] => Array
                        (
                            [name] => Loki
                            [age] => 35
                        )

                )

        )

)

Окончательный код для преобразования многомерного массива в XML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
<html xmlns="
<?php
function generateXML($data) {
    $title = $data['department'];
    $rowCount = count($data['employe']);
    
    //create the xml document
    $xmlDoc = new DOMDocument();
    
    $root = $xmlDoc->appendChild($xmlDoc->createElement("employe_info"));
    $root->appendChild($xmlDoc->createElement("title",$title));
    $root->appendChild($xmlDoc->createElement("totalRows",$rowCount));
    $tabUsers = $root->appendChild($xmlDoc->createElement('rows'));
    
    foreach($data['employe'] as $user){
        if(!empty($user)){
            $tabUser = $tabUsers->appendChild($xmlDoc->createElement('employe'));
            foreach($user as $key=>$val){
                $tabUser->appendChild($xmlDoc->createElement($key, $val));
            }
        }
    }
    
    header("Content-Type: text/plain");
    
    //make the output pretty
    $xmlDoc->formatOutput = true;
    
    //save xml file
    $file_name = str_replace(' ', '_',$title).'.xml';
    $xmlDoc->save($file_name);
    
    //return xml file name
    return $file_name;
}

function xml_to_array(){
    //xml file path
    $path = "Accounts.xml";

    //read entire file into string
    $xmlfile = file_get_contents($path);

    //convert xml string into an object
    $xml = simplexml_load_string($xmlfile);

    //convert into json
    $json  = json_encode($xml);

    //convert into associative array
    $array_data = json_decode($json, true);
    
    print_r($array_data);
}
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Multidimensional Array To XML and XML to Array</title>
</head>
<body>
<div class="container">
  <h2 class="text-success">Multidimensional Array To XML and XML to Array</h2>
    <?php
    $array = array(
    'department'=> 'Accounts',
    'employe'=> array(
      '0' => array(
        'name' 		=> 'Iron Man',
        'age'		=> '34'
      ),
      '1' => array(
        'name' 		=> 'Black',
        'age'		=> '30'
      ),
      '2' => array(
        'name' 		=> 'Captain',
        'age'		=> '37'
      ),
      '3' => array(
        'name' 		=> 'Loki',
        'age'		=> '35'
      )
    )
  );
    generateXML($array);
    
    echo "XML to Array: <br>";
    xml_to_array();
    ?>
</div>
   
</body>
</html>

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *