SimpleXML анализирует несколько тегов с одинаковыми именами

#php #mysql #xml #parsing #simplexml

#php #mysql #xml #синтаксический анализ #simplexml

Вопрос:

пожалуйста, мне нужно проанализировать XML-файл с информацией об автомобилях. Я сделал все в cars, photos, но мне нужно, чтобы в дополнительной таблице был идентификатор, внешний ключ к идентификатору для таблицы cars, и у всех автомобилей есть случайный идентификатор equipment_id.

Мне нужно занести это в таблицу «оборудование»:

   <equipment>
  <equipment_id>eq_co_driver_airbag</equipment_id>
  <equipment_id>eq_driver_airbag</equipment_id>
  <equipment_id>eq_abs</equipment_id>
  <equipment_id>eq_aut_aircon</equipment_id>
  <equipment_id>eq_dalk_centr</equipment_id>
  <equipment_id>eq_el_contr_win</equipment_id>
  <equipment_id>eq_el_contr_mirrors</equipment_id>
  <equipment_id>eq_lite_disky</equipment_id>
  <equipment_id>eq_immobilizer</equipment_id>
  <equipment_id>eq_mlhovky</equipment_id>
  <equipment_id>eq_adjustable_drive_wheel</equipment_id>
  <equipment_id>eq_original_autoradio</equipment_id>
  <equipment_id>eq_on_board_comp</equipment_id>
  <equipment_id>eq_steering_booster</equipment_id>
  <equipment_id>eq_leather_trim</equipment_id>
  <equipment_id>eq_ASR</equipment_id>
  <equipment_id>eq_stresni_sibr_el</equipment_id>
  <equipment_id>eq_ton_skla</equipment_id>
  <equipment_id>eq_venkovni_teplomer</equipment_id>
  <equipment_id>eq_adjustable_seat</equipment_id>
  </equipment>
  

Я не могу создать правильный сценарий импорта.

Вот одна машина из моего XML-файла: http://pastebin.com/Yyr1GXyb

И вот список одного автомобиля через print_r: http://pastebin.com/csQpQSDs

Я попробовал это:

 echo "import equipment .. ";
foreach ($xml->cars->car->equipment as $data) {
        mysql_query("INSERT INTO equipment (cars_id, equipment_id)
        VALUES
        ($id_car, "$data->equipment_id")")
        or die(mysql_error());
    $id_car  ;
}
echo "OKn";
  

и это

 echo "import equipment .. ";
foreach ($xml->cars->car as $entry) {
    foreach ($entry->equipment as $data) {
        mysql_query("INSERT INTO equipment (cars_id, equipment_id)
        VALUES
        ($id_car, "$data->equipment_id")")
        or die(mysql_error());
    }
    $id_car  ;
}
echo "OKn";
  

но безуспешно

Я не могу понять. Пожалуйста, помогите мне. Большое вам спасибо!

Комментарии:

1. Вместо этого используйте DOMDocument, что упрощает работу

2. Это невозможно с помощью SimpleXML? Хотите использовать SimpleXML, я думаю, это возможно. Я не знаю, как использовать DOMDocument для этого действия

Ответ №1:

Решено!

 echo "import equipment .. ";
foreach ($xml->cars->car as $entry) {
    foreach ($entry->children()->equipment->equipment_id as $data) {
    mysql_query("INSERT INTO equipment (cars_id, equipment_id)
        VALUES
        ($id_car, "$data")")
        or die(mysql_error());
    }
    $id_car  ;
}
echo "OKn";
  

Комментарии:

1. Вы должны собрать кучу строк для вставки, а затем запустить запрос. Не для одной строки. Еще лучше использовать подготовленные инструкции для перекачки данных в БД. Смотрите mysqli .

2. Или, что еще лучше, напрямую конвертируйте XML через Mysql. dev.mysql.com/doc/refman/5.5/en/load-xml.html