【问题标题】:How to import XML data into mysql table如何将XML数据导入mysql表
【发布时间】:2023-03-03 16:44:01
【问题描述】:

我尝试将 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 列没有显示错误,但我在 name 列中得到空值。

xml导入查询

LOAD XML INFILE "/root/CommunityBlog_7cdc528d-7fda-4eb3-bff7-d9ccbc7d8f7b_02202019015559983PM.xml" INTO TABLE tbl_source ROWS IDENTIFIED BY '<entry>';

【问题讨论】:

    标签: mysql xml


    【解决方案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 函数将确切的数据放入另一个表中。

    【讨论】:

    • 如果我理解正确,您可以稍微简化一下:extractValue(xmlset , '/feed/entry[$row_index]/id') & Co
    【解决方案2】:

    您可以尝试处理您遇到的一些问题:

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

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

    【讨论】:

    • 感谢您的回复,不幸的是,在我的情况下,我的 xml 文件中有两条 snx:rank 行,最后一条是建议,另一条是视图。我需要在两个不同的列中使用这些值。抱歉,我忘了提到有问题的那一行。
    猜你喜欢
    • 2017-07-12
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 2013-12-21
    相关资源
    最近更新 更多