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.