我试图将XML数据加载到Mysql表中,但是我在将xml数据加载到mysql表中时却遇到了麻烦。
这是我的XML文件
<entry>
<id>urn:lsid:ibm.com:blogs:blog-f66c48be-05e9-4ce2-bfae-bcb3f0f0e0d1</id>
<title type="text">abcd</title>
<author>
<name>abcd</name>
<snx:isExternal>false</snx:isExternal>
</author>
<published>2019-02-14T21:26:28+05:30</published>
<updated>2019-02-14T21:26:43+05:30</updated>
<snx:rank scheme="http://www.example.com/recommendations">0</snx:rank> </entry>
在mysql中创建表时出现错误
create table tbl_source (id varchar (500),title varchar (500), name varchar(50), updated varchar(50), snx:rank scheme="http://www.example.com/recommendations" int);
在不使用列名snx:rank列的情况下,没有显示错误,但在名称列中却为空。
xml导入查询
LOAD XML INFILE "/root/CommunityBlog_7cdc528d-7fda-4eb3-bff7-d9ccbc7d8f7b_02202019015559983PM.xml" INTO TABLE tbl_source ROWS IDENTIFIED BY '<entry>';
答案 0 :(得分:1)
create procedure w()
begin declare row_index int;
declare xmlset longtext;
declare row_count int;
set row_index=1;
SET xmlset = LOAD_FILE("path/abc.xml");
set row_count = extractValue(xmlset ,concat('count(','//entry',')'));
while row_index <= row_count do
insert into tbl_source20 (id,updated,name,rank) values(
extractValue(xmlset , concat('/feed/entry[',row_index,']/id')),
extractValue(xmlset , concat('/feed/entry[',row_index,']/updated')),
extractValue(xmlset , concat('/feed/entry[',row_index,']/author/name')),
extractValue(xmlset , concat('/feed/entry[',row_index,']/snx:rank'))
);
set row_index = row_index + 1;
end while;
end
我尝试了这种方法从XML中获取数据。然后使用substring_index函数将确切的数据获取到另一个表中。
答案 1 :(得分:0)
您可以尝试解决一些问题:
LOAD XML INFILE "/path/to/file.xml" INTO TABLE tbl_source
ROWS IDENTIFIED BY '<entry>'
(id, title, @author, @updated, @`snx:rank`)
SET
updated = IF(
SUBSTR(@updated, 20, 1) = '+'
, SUBTIME(STR_TO_DATE(LEFT(@updated, 19), '%Y-%m-%dT%H:%i:%s'), SUBSTR(@updated, 21))
, ADDTIME(STR_TO_DATE(LEFT(@updated, 19), '%Y-%m-%dT%H:%i:%s'), SUBSTR(@updated, 21))
) -- converting to UTC
, rank = @`snx:rank`
;
不幸的是,我不知道如何与作者打交道。