Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Probleme mit MySQL LOAD XML INFILE

Ich konnte keinen Weg finden, dies mit LOAD XML INFILE zu tun während die CDATA-Inhalte erhalten bleiben. Das Folgende funktioniert jedoch und verwendet das gute alte LOAD DATA INFILE zusammen mit ExtractValue() um dasselbe zu erreichen:

Wenn wir Ihre Beispieldatei und diese Tabelle haben:

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

Wenn Sie dann diese Anweisung ausführen, wird der Inhalt der Datei in die Tabelle importiert:

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')
;

Dies funktioniert, indem LOAD DATA INFILE mitgeteilt wird, dass jeder <row>...</row> ist eine logische 'Zeile', die in der lokalen Variablen @tmp gespeichert wird . Diese übergeben wir dann an den ExtractValue Funktion als XML-Fragment und wählen Sie die gewünschten Werte daraus aus, indem Sie die entsprechenden XPath-Ausdrücke verwenden.