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);