sql >> Database teknologi >  >> RDS >> Mysql

Problemer med MySQL LOAD XML INFILE

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.




  1. En tilgang til indeksjustering – del 1

  2. Henter data fra JDBC-databasen til Jtable

  3. Sådan formateres nummer med . som tusind-separator, og som decimal-separator?

  4. Sikkerhedskopier mySQL-databaser fra localhost, der kører på Wamp-serveren