Nemohl jsem najít způsob, jak to udělat pomocí LOAD XML INFILE
při zachování obsahu CDATA. Následující však funguje a používá starý dobrý LOAD DATA INFILE
spolu s ExtractValue()
dosáhnout stejné věci:
Pokud máme váš vzorový soubor a tuto tabulku:
CREATE TABLE `yahootable` (
`id` int(11) NOT NULL PRIMARY KEY,
`various` text,
`message` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;
poté spuštěním tohoto příkazu importujete obsah souboru do tabulky:
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')
;
Funguje to tak, že LOAD DATA INFILE řeknete, že každý <row>...</row>
je logický 'řádek', který ukládá do lokální proměnné @tmp
. Toto pak předáme do ExtractValue
fungovat jako fragment XML a vybrat z něj požadované hodnoty pomocí příslušných výrazů XPath.