如何将XML数据导入mysql表

时间:2019-02-28 17:26:22

标签: mysql xml

我试图将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>     
  1. 我无法在snx:rank值内获取该值。
  2. 在我的更新标签中,我的数据时间为+05:30,有什么方法可以 删除值?
  3. 我需要嵌套作者标签的名称,给我建议 得到名字

在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>';

2 个答案:

答案 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`
;

不幸的是,我不知道如何与作者打交道。