Преобразование 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;
}

.