Здравствуйте. Подскажите, пожалуйста, как прочитать все <param> в xml? В базу залетает только первое значение, а остальных как и нет... Спойлер: Пример xml Код (Text): <offer id="246150" type="vendor.model" available="true"> <price>8.44</price> <categoryId>2444</categoryId> <picture>/upload/iblock/4d8/ral_5015.jpg</picture> <model>Заглушка конька круглого простая NormanMP (ПЭ-01-5015-0.5)</model> <manufacturer_warranty>true</manufacturer_warranty> <param name="Толщина" unit="мм">0.5</param> <param name="Тип покрытия">Полиэстер</param> <param name="Вид поверхности">Глянцевые</param> <param name="Ширина" unit="м">0.12</param> <param name="Цветостойкость">Хорошая</param> <param name="Коррозийная стойкость">Удовлетворительная</param> <param name="Устойчивость к мех. повреждениям">Удовлетворительная</param> <param name="Ширина листа, м">0.12</param> <param name="Область применения">Конёк</param> <param name="Единица измерения">5</param> </offer> Спойлер: PHP PHP: if(isset($_POST['importSubmit2'])){ $data = simplexml_load_file(__DIR__ . '/file.xml'); $shop_name = strval($data->shop->name); $db->query("DELETE FROM `oc_product` WHERE `shop` = '".$shop_name."'"); $db->query("DELETE FROM `oc_product_description` WHERE `shop` = '".$shop_name."'"); $db->query("DELETE FROM `oc_product_to_category` WHERE `shop` = '".$shop_name."'"); $db->query("DELETE FROM `oc_product_to_layout` WHERE `shop` = '".$shop_name."'"); $db->query("DELETE FROM `oc_product_to_store` WHERE `shop` = '".$shop_name."'"); foreach ($data->shop->offers->offer as $row) { $product_id = intval($row['id']); $price = strval($row->price); $categoryId = intval($row->categoryId); if(isset($row->model)){ $name = strval($row->model); }else{ $name = strval($row->name); } if(isset($row->article)){ $article = strval($row->article); } $picture = strval($row->picture); $description = strval($row->description); if(isset($row->okdp)){ $odkp = strval($row->okdp); }else{ $odkp = ''; } if(isset($row->param)){ $param = $row->param; } $db->query("INSERT INTO `oc_product` (`product_id`,`model`,`date_available`,`sku`,`upc`,`ean`,`jan`,`isbn`,`mpn`,`location`,`stock_status_id`,`image`, `weight_class_id`, `manufacturer_id`, `tax_class_id`,`date_added`,`date_modified`,`status`,`quantity`, `price`, `shop`) VALUES ('".$product_id."','".$odkp."',STR_TO_DATE('2020-05-28 12:00', '%Y-%m-%d %H:%i'),'".$article."','', '','','','','0','0','".$picture."', '1', '0','1000',NOW(),NOW(),'1','1000','".$price."', '".$shop_name."')"); $db->query("INSERT INTO `oc_product_description` (`product_id`, `language_id`, `name`, `description`, `tag`, `meta_title`, `meta_description`, `meta_keyword`, `shop`) VALUES ('".$product_id."','1','".$name."','".$description."','','".$name."','','','".$shop_name."')"); $db->query("INSERT INTO `oc_product_to_store` (`product_id`, `store_id`, `shop`) VALUES ('".$product_id."','0','".$shop_name."')"); $db->query("INSERT INTO `oc_product_to_category` (`product_id`, `category_id`, `shop`) VALUES ('".$product_id."','".$categoryId."','".$shop_name."')"); $db->query("INSERT INTO `oc_product_to_layout` (`product_id`, `store_id`, `layout_id`, `shop`) VALUES ('".$product_id."','0','0','".$shop_name."')"); $oc_attribute_description = $db->query("SELECT `attribute_id`, `language_id`, `name` FROM `oc_attribute_description` WHERE `name` = '".$param['name']."'"); while($rows = $oc_attribute_description->fetch_assoc()){ $db->query("INSERT INTO `oc_product_attribute` (`product_id`, `attribute_id`, `language_id`, `text`) VALUES ('".$product_id."','".$rows['attribute_id']."','1','".$param."')"); } } }
PHP: <?php // Файл test.xml содержит XML-документ с корневым элементом // и по меньшей мере элемент /[root]/title. if (file_exists('test.xml')) { $xml = simplexml_load_file('test.xml'); print_r($xml); } else { exit('Не удалось открыть файл test.xml.'); } ?>
Это все читается и работает. Проблема в том, что имеется 10 <param> с разными именами и значениями. Вот эти <param name =''> я пытаюсь сопоставить с такими же name в бд в таблице скажем 1 и если такой атрибут есть то нужно внести в таблицу 2. что-то типо того, но это нифига не то. PHP: $oc_attribute_description = $db->query("SELECT `attribute_id`, `language_id`, `name` FROM `oc_attribute_description` WHERE `name` = '".$param['name']."'"); while($rows = $oc_attribute_description->fetch_assoc()){ $db->query("INSERT INTO `oc_product_attribute` (`product_id`, `attribute_id`, `language_id`, `text`) VALUES ('".$product_id."','".$rows['attribute_id']."','1','".$param."')"); }