Import XML to DataBase PHP script

Помогите пожалуйста разобраться((( нужно написать функцию импортировать xml файл в mysql, я только изучаю php и mysql,server и т п, до сих пор написал столько, буду рад если кто то поможет разобраться. CODE

$mysqli = mysqli_connect('localhost', 'mysql', 'mysql', 'test_samson');

if ($mysqli->connect_error) {
    die('Ошибка подключения (' . $mysqli->connect_errno . ') '
        . $mysqli->connect_error);
}

if (mysqli_connect_error()) {
    die('Ошибка подключения (' . mysqli_connect_errno() . ') '
        . mysqli_connect_error());
}

echo 'Соединение установлено... ' . $mysqli->host_info . "\n";

$xml = simplexml_load_file('test.xml');

foreach ($xml->Товары as $products) {
    $code = (string) $products['Код'];
    $name = (string) $products['Название'];
    $price = (string) $products['Цена'];
    $type = (string) $products['Тип'];
    $density = (string) $products['Плотность'];
    $white = (string) $products['Белизна'];
    $unit = (string) $products['ЕдИзм'];
    $format = (string) $products['Формат'];
    $type2 = (string) $products['Тип2'];
    $section = (string) $products['Раздел'];



    $sql = "LOAD XML LOCAL INFILE 'test.xml' INTO TABLE `a_product` ('Код', 'Название', 'Цена', 'Тип','Плотность','Белизна','ЕдИзм','Формат','Тип2','Раздел'), 
    VALUES ($code, $name, $price, $type, $density, $white, $unit, $format, $type2, $section)";
    $result = mysqli_query($mysqli, $sql);
    if (!$result) {
        echo 'MySql Error';
    } else {
        echo "Succes";
    }
}
$mysqli->close();

XML FILE

<Товары>
    <Товар Код="201" Название="Бумага А4">

        <Цена Тип="Базовая">11.50</Цена>

        <Цена Тип="Москва">12.50</Цена>

        <Свойства>

            <Плотность>100</Плотность>

            <Белизна ЕдИзм="%">150</Белизна>

        </Свойства>

        <Разделы>

            <Раздел>Бумага</Раздел>

        </Разделы>

    </Товар>

    <Товар Код="202" Название="Бумага А3">

        <Цена Тип="Базовая">18.50</Цена>

        <Цена Тип="Москва">22.50</Цена>

        <Свойства>

            <Плотность>90</Плотность>

            <Белизна ЕдИзм="%">100</Белизна>

        </Свойства>

        <Разделы>

            <Раздел>Бумага</Раздел>

        </Разделы>

    </Товар>

    <Товар Код="302" Название="Принтер Canon">

        <Цена Тип="Базовая">3010</Цена>

        <Цена Тип="Москва">3500</Цена>

        <Свойства>

            <Формат>A4</Формат>

            <Формат>A3</Формат>

            <Тип>Лазерный</Тип>

        </Свойства>

        <Разделы>

            <Раздел>Принтеры</Раздел>

            <Раздел>МФУ</Раздел>

        </Разделы>

    </Товар>

    <Товар Код="305" Название="Принтер HP">

        <Цена Тип="Базовая">3310</Цена>

        <Цена Тип="Москва">2999</Цена>

        <Свойства>

            <Формат>A3</Формат>

            <Тип>Лазерный</Тип>

        </Свойства>

        <Разделы>

            <Раздел>Принтеры</Раздел>

            <Раздел>МФУ</Раздел>

        </Разделы>

    </Товар>

</Товары>```

Ответы (1 шт):

Автор решения: Oleg Dmitrochenko

Попробуйте сразу перебирать ваши товары, игнорируя родителя.

foreach($xml as $product){
    $name = $product->attributes()['Название'];
    $code = $product->attributes()['Код'];

    // $product->Цена

Ваш XML должен содержать еще заголовок, например, <?xml version='1.0'?>.

Используйте var_dump($product) для отладки вашего кода, так вы увидите содержимое объектов.

Обратите внимание, значение цены выводится не совсем корректно, т.к. пропадают свойства второго элемента, однако список цен весь.

Я использовал ваш код XML и $xml = new SimpleXMLElement($file); для тестирования, где $file:

$file = <<<XML
<?xml version='1.0'?>
<Товары>
</Товары>
XML;

$xml = new SimpleXMLElement($file);
$numberOfProducts = count($xml);
→ Ссылка