Преобразование XML в массив
Для преобразования XML в массив можно использовать следующую функцию:
function xml_to_array($XML)
{
$XML = trim($XML);
$returnVal = $XML;
// Expand empty tags
$emptyTag = '<(.*)/>';
$fullTag = '<\\1></\\1>';
$XML = preg_replace ("|$emptyTag|", $fullTag, $XML);
$matches = [];
if (preg_match_all('|<(.*)>(.*)</\\1>|Ums', trim($XML), $matches))
{
// Если есть элементы, тогда вернуть массив, иначе текст
if (count($matches[1]) > 0) $returnVal = [];
foreach ($matches[1] as $index => $outerXML)
{
$attribute = $outerXML;
$value = xml_to_array($matches[2][$index]);
if (! isset($returnVal[$attribute])) $returnVal[$attribute] = [];
$returnVal[$attribute][] = $value;
}
}
// Bring un-indexed singular arrays to a non-array value.
if (is_array($returnVal)) foreach ($returnVal as $key => $value)
{
if (is_array($value) && count($value) == 1 && key($value) === 0)
{
$returnVal[$key] = $returnVal[$key][0];
}
}
return $returnVal;
}
.
Прокомментировать/Отблагодарить