如何使用mysql LOAD XML LOCAL INFILE导入xml文件

Ami*_*mir 4 xml mysql

我有一个像这样的xml文件:

的test.xml

<?xml version="1.0" encoding="utf-8" ?>
<plugin name="tree">
    <title>Test</title>
    <description>some description</description>
    <files>
        <file>test.tmp</file>
    </files>
    <install><![CDATA[
        global $test;
    ]]></install>
    <hooks>
        <hook name="hookname"><![CDATA[
            global $local;
        ]]></hook>
    </hooks>

    <phrases>
        <phrase key="category"><![CDATA[Show categories]]></phrase>
    </phrases>
</plugin>
Run Code Online (Sandbox Code Playgroud)

我喜欢将它导入MySQL表,如'mytable'

CREATE TABLE mytable (plugin varchar(255),title varchar(255),description varchar(255), file varchar(255),install varchar(255),hook varchar(255),phrase varchar(255));
Run Code Online (Sandbox Code Playgroud)

我使用下面的命令

LOAD XML LOCAL INFILE 'test.xml' 
INTO TABLE mytable(plugin,title,description,file,install,hook,phrase);
Run Code Online (Sandbox Code Playgroud)

它运行成功,但有0行!

查询已成功实施,0行已受影响.

谢谢

Rah*_*hul 12

包括这一行ROWS IDENTIFIED BY '<plugin>'.你的查询应该是这样的

LOAD XML LOCAL INFILE "D:\\test.xml"
INTO TABLE mytable
ROWS IDENTIFIED BY '<plugin>';
Run Code Online (Sandbox Code Playgroud)

看起来你的XML文件形成不正确,所以即使插入了1行; 所有值都不会被提取(保留NULL).

如下所示做一些改变

创建表结构

CREATE TABLE mytable (
plugin_name varchar(255),
title varchar(255),
description varchar(255), 
`file` varchar(255),
`install` varchar(255),
hook varchar(255),
phrase varchar(255));
Run Code Online (Sandbox Code Playgroud)

更改XML文件

<?xml version="1.0" encoding="utf-8" ?>
<plugin plugin_name="tree">
    <title>Test</title>
    <description>some description</description>
         <file>test.tmp</file>
    <install>![CDATA[
        global $test;
    ]]</install>
        <hook name="hookname">![CDATA[
            global $local;
        ]]</hook>
        <phrase key="category">![CDATA[Show categories]]</phrase>
</plugin>
Run Code Online (Sandbox Code Playgroud)

现在,如果你使用

LOAD XML LOCAL INFILE "D:\\test.xml"
INTO TABLE mytable
ROWS IDENTIFIED BY '<plugin>';
Run Code Online (Sandbox Code Playgroud)

所有数据都被提取得很好

在此输入图像描述