MySQL 5.6加载XML本地填充和空XML元素

MySQL 5.6加载XML本地填充和空XML元素,mysql,xml,linux,centos,Mysql,Xml,Linux,Centos,我有大量相当大的XML文件要导入到MySQL表中。我运行的是Centos 6.3和MySQL 5.6,我最初尝试了5.5,但遇到了问题,后来发现5.5中有一个关于空XML标记的错误,所以在5.6中解决了这个问题的印象下,我选择了它 XML文件本身包含许多我不感兴趣的元素,因此插入数据的表包含的字段比XML文件中的元素少得多,但据我所知,这不应该是一个问题。所有字段名都对应于XML文件中的元素名 我有这张桌子 CREATE TABLE `products` ( `sku`

我有大量相当大的XML文件要导入到MySQL表中。我运行的是Centos 6.3和MySQL 5.6,我最初尝试了5.5,但遇到了问题,后来发现5.5中有一个关于空XML标记的错误,所以在5.6中解决了这个问题的印象下,我选择了它

XML文件本身包含许多我不感兴趣的元素,因此插入数据的表包含的字段比XML文件中的元素少得多,但据我所知,这不应该是一个问题。所有字段名都对应于XML文件中的元素名

我有这张桌子

    CREATE TABLE `products` (
        `sku` BIGINT(20) UNSIGNED NOT NULL,
        `productId` BIGINT(20) UNSIGNED NOT NULL,
        `name` VARCHAR(250) NULL,
        `type` VARCHAR(250) NULL,
        `format` VARCHAR(250) NULL,
        `albumTitle` VARCHAR(250) NULL,
        `artistName` VARCHAR(250) NULL,
        `upc` BIGINT(15) UNSIGNED NULL,
        `shortDescription` TEXT NULL,
        `image` VARCHAR(100) NULL,
        INDEX `Index 1` (`productId`),
        INDEX `Index 2` (`name`),
        INDEX `Index 3` (`type`),
        INDEX `Index 4` (`format`)
    )
XML的格式是


...
...
我用这个来插入数据

LOAD XML LOCAL INFILE 'filename.xml' INTO TABLE products ROWS IDENTIFIED BY '<product>';
将XML本地填充“filename.XML”加载到由“”标识的表产品行中;
插入的行数正确,但数据库中的所有字段均不包含任何内容或空值。这似乎与我在5.5中看到的问题相同,在5.5中,包含空标记(例如
而不是
的XML)的XML没有得到处理,并导致这种结果

我想我的问题是我能做些什么来防止这种行为。我这样做对吗


我曾想过尝试查找并替换所有空标记,但这超出了我在Linux中的知识范围,因此这可能是一个选项,有人可以建议一种实现它的方法,这将是一个很大的帮助,但任何帮助都将不胜感激。

回答我自己的问题,以防其他人遇到此问题,我所做的是创建一个简单的bash脚本,从每个文件中删除任何空节点。我调用的bash脚本clean.sh包含以下内容

for file in *xml
do
        echo "Processing $file"
         sed 's/<.*\/>//g' $file > tt
         mv tt processed/${file}
done
运行相同的SQL查询后:

LOAD XML LOCAL INFILE 'filename.xml' INTO TABLE products ROWS IDENTIFIED BY '<product>';
将XML本地填充“filename.XML”加载到由“”标识的表产品行中;
已将正确的数据导入数据库表。我的下一步是创建另一个bash脚本来导入所有XML文件

希望这对某人有所帮助。

可能与
sh clean.sh
LOAD XML LOCAL INFILE 'filename.xml' INTO TABLE products ROWS IDENTIFIED BY '<product>';