Mysql
 sql >> Base de données >  >> RDS >> Mysql

Problèmes avec MySQL LOAD XML INFILE

Je n'ai pas trouvé de moyen de le faire en utilisant LOAD XML INFILE tout en préservant le contenu CDATA. Cependant, ce qui suit fonctionne et utilise le bon vieux LOAD DATA INFILE avec ExtractValue() pour accomplir la même chose :

Si nous avons votre fichier d'exemple et ce tableau :

CREATE TABLE `yahootable` (
  `id` int(11) NOT NULL PRIMARY KEY,
  `various` text,
  `message` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;

puis exécuter cette instruction importera le contenu du fichier dans la table :

LOAD DATA INFILE 
    '/tmp/yahootable.xml'
INTO TABLE 
    yahootable
CHARACTER SET 'utf8'
LINES STARTING BY '<row>' TERMINATED BY '</row>'
(@tmp)
SET
  id      = ExtractValue(@tmp, '//id'),
  various = ExtractValue(@tmp, '//various'),
  message = ExtractValue(@tmp, '//message')
;

Cela fonctionne en indiquant à LOAD DATA INFILE que chaque <row>...</row> est une 'ligne' logique, qu'il stocke dans la variable locale @tmp . Nous le transmettons ensuite à ExtractValue fonctionner comme un fragment XML et en sélectionner les valeurs que nous voulons en utilisant les expressions XPath appropriées.