Saya tidak dapat menemukan cara untuk melakukan ini menggunakan LOAD XML INFILE
sambil mempertahankan konten CDATA. Namun, berikut ini berfungsi dan menggunakan LOAD DATA INFILE
lama yang bagus bersama dengan ExtractValue()
untuk mencapai hal yang sama:
Jika kami memiliki file contoh Anda dan tabel ini:
CREATE TABLE `yahootable` (
`id` int(11) NOT NULL PRIMARY KEY,
`various` text,
`message` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;
kemudian menjalankan pernyataan ini akan mengimpor isi file ke dalam tabel:
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')
;
Ini bekerja dengan memberi tahu LOAD DATA INFILE bahwa setiap <row>...</row>
adalah 'garis' logis, yang disimpan dalam variabel lokal @tmp
. Kami kemudian meneruskan ini ke ExtractValue
berfungsi sebagai fragmen XML dan pilih nilai darinya yang kita inginkan menggunakan ekspresi XPath yang sesuai.