Tôi không thể tìm thấy cách nào để thực hiện việc này bằng cách sử dụng LOAD XML INFILE
trong khi vẫn bảo toàn nội dung CDATA. Tuy nhiên, các cách sau hoạt động và sử dụng LOAD DATA INFILE
cũ tốt cùng với ExtractValue()
để hoàn thành điều tương tự:
Nếu chúng tôi có tệp ví dụ của bạn và bảng này:
CREATE TABLE `yahootable` (
`id` int(11) NOT NULL PRIMARY KEY,
`various` text,
`message` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;
sau đó chạy câu lệnh này sẽ nhập nội dung của tệp vào bảng:
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')
;
Điều này hoạt động bằng cách thông báo cho THÔNG TIN DỮ LIỆU TẢI rằng mỗi <row>...</row>
là một 'dòng' logic, được lưu trữ trong biến cục bộ @tmp
. Sau đó, chúng tôi chuyển điều này tới ExtractValue
hoạt động như một phân đoạn XML và chọn các giá trị từ nó mà chúng tôi muốn bằng cách sử dụng các biểu thức XPath thích hợp.