Ik kon geen manier vinden om dit te doen met LOAD XML INFILE
met behoud van de CDATA-inhoud. Het volgende werkt echter en gebruikt het goede oude LOAD DATA INFILE
samen met ExtractValue()
om hetzelfde te bereiken:
Als we uw voorbeeldbestand en deze tabel hebben:
CREATE TABLE `yahootable` (
`id` int(11) NOT NULL PRIMARY KEY,
`various` text,
`message` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;
dan zal het uitvoeren van deze instructie de inhoud van het bestand in de tabel importeren:
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')
;
Dit werkt door LOAD DATA INFILE te vertellen dat elke <row>...</row>
is een logische 'regel', die het opslaat in de lokale variabele @tmp
. We geven dit vervolgens door aan de ExtractValue
functioneren als een XML-fragment en selecteer de waarden eruit die we willen met behulp van de juiste XPath-expressies.