Jag kunde inte hitta ett sätt att göra detta med LOAD XML INFILE
samtidigt som CDATA-innehållet bevaras. Men följande fungerar och använder gamla goda LOAD DATA INFILE
tillsammans med ExtractValue()
för att åstadkomma samma sak:
Om vi har din exempelfil och den här tabellen:
CREATE TABLE `yahootable` (
`id` int(11) NOT NULL PRIMARY KEY,
`various` text,
`message` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;
att köra denna sats kommer att importera innehållet i filen till 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')
;
Detta fungerar genom att tala om för LOAD DATA INFILE att varje <row>...</row>
är en logisk "rad", som den lagrar i den lokala variabeln @tmp
. Vi skickar sedan detta till ExtractValue
fungera som ett XML-fragment och välj de värden från det som vi vill använda med lämpliga XPath-uttryck.