sql >> Databasteknik >  >> RDS >> Mysql

Problem med MySQL LADDA XML-INFIL

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.




  1. Mina favoritpostgreSQL-frågor och varför de är viktiga

  2. Mysql - Summering av antalet sammanfogade tabeller

  3. Skapa en tillfällig tabell i en SELECT-sats utan en separat CREATE TABLE

  4. Kotändare OCH ELLER OCH