Преобразование многомерного массива в файл 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>