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.