【问题标题】:MySQL 5.6 LOAD XML LOCAL INFILE and empty XML elementsMySQL 5.6 LOAD XML LOCAL INFILE 和空 XML 元素
【发布时间】:2013-04-10 04:27:27
【问题描述】:

我有大量相当大的 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 格式

   <products>
       <product>
           ...
       </product>
       ...
   </products>

我正在使用它来插入数据

LOAD XML LOCAL INFILE 'filename.xml' INTO TABLE products ROWS IDENTIFIED BY '<product>';

正在插入正确数量的行,但数据库中的所有字段均不包含任何内容或为 NULL。这似乎与我在 5.5 中看到的相同问题,其中 XML 包含空标签,例如&lt;sku /&gt; 而不是 &lt;sku&gt;&lt;/sku&gt; 没有被处理并导致这种结果。

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

我曾考虑尝试查找和替换所有空标签,但这超出了我在 Linux 中的知识范围,所以也许这是一个选项,有人可以提出一种实现它的方法,这将是一个很大的帮助,但任何帮助都是非常感谢。

【问题讨论】:

标签: mysql xml linux centos


【解决方案1】:

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

for file in *xml
do
        echo "Processing $file"
         sed 's/<.*\/>//g' $file > tt
         mv tt processed/${file}
done

请注意,我创建了一个名为“已处理”的新目录,其中放置了已处理的文件。

要运行脚本(假设您的当前位置是脚本所在的位置),您只需运行

sh clean.sh

运行相同的 SQL 查询后:

LOAD XML LOCAL INFILE 'filename.xml' INTO TABLE products ROWS IDENTIFIED BY '<product>';

正确的数据被导入到数据库表中。我的下一步是创建另一个 bash 脚本来导入所有 XML 文件。

希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2020-08-31
    • 2014-11-28
    • 2017-08-12
    • 2013-10-23
    • 1970-01-01
    • 2012-10-17
    • 2012-10-05
    • 1970-01-01
    • 2017-12-04
    相关资源
    最近更新 更多