web-dev-qa-db-fra.com

Comment importer un fichier XML dans une table de base de données MySQL en utilisant XML_LOAD (); une fonction

J'ai un fichier XML qui ressemble à ceci:

    <?xml version="1.0" encoding="UTF-8"?>

<resultset statement="YOUR SQL STATEMENTS TO GENERATE THIS XML FILE" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <row>
    <field name="personal_number">539</field>
    <field name="firstname">Name</field>
    <field name="lastname">Surname</field>
    <field name="email">email.domain.com</field>
    <field name="start_time">2011-04-02 13:30:00</field>
    <field name="end_time">2011-04-02 18:15:00</field>
    <field name="employee_category">1,2,4,5,22,37,38,39,41,43,44</field>
  </row>
  <row>
    <field name="personal_number">539</field>
    <field name="firstname">Name</field>
    <field name="lastname">Surname</field>
    <field name="email">email.domain.com</field>
    <field name="start_time">2011-04-02 13:30:00</field>
    <field name="end_time">2011-04-02 18:15:00</field>
    <field name="employee_category">1,2,4,5,22,37,38,39,41,43,44</field>
  </row>
  <row>
    <field name="personal_number">539</field>
    <field name="firstname">Name</field>
    <field name="lastname">Surname</field>
    <field name="email">email.domain.com</field>
    <field name="start_time">2011-04-02 13:30:00</field>
    <field name="end_time">2011-04-02 18:15:00</field>
    <field name="employee_category">1,2,4,5,22,37,38,39,41,43,44</field>
  </row>

J'essaie de l'importer dans MySQL en utilisant l'instruction SQL:

use databasename;
LOAD XML LOCAL INFILE '/pathtofile/file.xml' INTO TABLE my_tablename;

La table my_tablename contient les champs suivants:

id (auto increment id)
personal_number(varchar)
firstname(varchar) 
lastname(varchar)
email(varchar) 
start_time(varchar)
end_time(varchar)
employee_category(varchar)

J'ai l'erreur: Code d'erreur: 1136 Le nombre de colonnes ne correspond pas au nombre de valeurs à la ligne 1

J'utilise MySQL 5.1.56

Je suppose que cette erreur se produit car la table de base de données a un identifiant de champ, qui n'est pas présent dans le fichier XML. Comment est-il possible d'importer ce fichier XML à l'aide de requêtes MySQL de fonctions intégrées, de sorte qu'il ignore la colonne id lors de l'importation et s'appuie sur la fonction d'incrémentation automatique pour la colonne id? Existe-t-il un moyen plus intelligent de gérer les importations de fichiers XML dans MySQL? Peut-être il y a une meilleure déclaration qui permet de spécifier le mappage de colonne?

Merci!

46
Cninroh

vous pouvez spécifier des champs comme ceci:

LOAD XML LOCAL INFILE '/pathtofile/file.xml' 
INTO TABLE my_tablename(personal_number, firstname, ...); 
46
dnagirl

Comme ID est une incrémentation automatique, vous pouvez également spécifier ID = NULL comme,

LOAD XML LOCAL INFILE '/pathtofile/file.xml' INTO TABLE mon_nom de table SET ID = NULL;

5
Jayanth