Расширение PHP SimpleXML разбирает XML в масcив. SimpleXML имеет полный набор инструментов, которые позволяют читать, писать и анализировать XML-документ. Расширение SimpleXML требует минимальную версию PHP 5 и расширение PHP libxml.

Расширение PHP SimpleXML включено по умолчанию, проверить это можно с помощью функции phpinfo():

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

Для примера возьмем такой XML документ:

<?xml version='1.0'?>   
<items>   
    <item id='1'>
        <name>Box</name>
        <year>2021</year>  
        <price>30.00</price>     
        <address>
           <street>3030 Info Avenue</street>
           <city>Los Angeles</city>
           <state>CA</state>
        </address>
    </item>
    <item id='2'>
        <name>New box</name>
        <year>2022</year>  
        <price>50.00</price> 
        <address>
           <street>3040  Info Road</street>
           <city>Duluth</city>
           <state>GA</state>
        </address>
    </item>
</items>

Преобразуем XML в массив PHP. Для этого загружаем строку с XML в simplexml_load_string(), в ответ получим ассоциативный массив:

<?php

$xml = "<?xml version='1.0'?>   
<items>   
    <item id='1'>
        <name>Box</name>
        <year>2021</year>  
        <price>30.00</price>     
        <address>
           <street>3030 Info Avenue</street>
           <city>Los Angeles</city>
           <state>CA</state>
        </address>
    </item>
    <item id='2'>
        <name>New box</name>
        <year>2022</year>  
        <price>50.00</price> 
        <address>
           <street>3040  Info Road</street>
           <city>Duluth</city>
           <state>GA</state>
        </address>
    </item>
</items>";

libxml_use_internal_errors(TRUE);

//Используем simplexml_load_file(), если нужно распарсить файл
//$objXmlDocument = simplexml_load_file("pathToFile.xml");

//Используем simplexml_load_string(), если нужно распарсить строку
$objXmlDocument = simplexml_load_string($xml);

if ($objXmlDocument === FALSE) {
    echo "There were errors parsing the XML file.\n";

    foreach(libxml_get_errors() as $error) {
        echo $error->message;
    }

    exit;
}

$objJsonDocument = json_encode($objXmlDocument);
$arrOutput = json_decode($objJsonDocument, TRUE);

echo "<pre>";
print_r($arrOutput);
echo "</pre>";

foreach ($arrOutput['item'] as $arrOutputKey => $arrOutputValue) {
    echo $arrOutputValue['@attributes']['id'] . ' - ' .$arrOutputValue['name'] . '<br />';
}

Пример выполнения скрипта:

Array
(
    [item] => Array
        (
            [0] => Array
                (
                    [@attributes] => Array
                        (
                            [id] => 1
                        )
                    [name] => Box
                    [year] => 2021
                    [price] => 30.00
                    [address] => Array
                        (
                            [street] => 3030 Info Avenue
                            [city] => Los Angeles
                            [state] => CA
                        )
                )
            [1] => Array
                (
                    [@attributes] => Array
                        (
                            [id] => 2
                        )
                    [name] => New box
                    [year] => 2022
                    [price] => 50.00
                    [address] => Array
                        (
                            [street] => 3040  Info Road
                            [city] => Duluth
                            [state] => GA
                        )
                )
        )
)

1 - Box
2 - New box