Jeg kunne ikke finde en måde at gøre dette ved at bruge LOAD XML INFILE
samtidig med at CDATA-indholdet bevares. Men det følgende virker og bruger gode gamle LOAD DATA INFILE
sammen med ExtractValue()
for at opnå det samme:
Hvis vi har din eksempelfil og denne tabel:
CREATE TABLE `yahootable` (
`id` int(11) NOT NULL PRIMARY KEY,
`various` text,
`message` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;
derefter vil kørsel af denne sætning importere indholdet af filen til tabellen:
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')
;
Dette virker ved at fortælle LOAD DATA INFILE, at hver <row>...</row>
er en logisk 'linje', som den gemmer i den lokale variabel @tmp
. Vi sender derefter dette til ExtractValue
fungere som et XML-fragment, og vælg de værdier fra det, som vi ønsker ved hjælp af de passende XPath-udtryk.