gpt4 book ai didi

MySQL 5.6 LOAD XML LOCAL INFILE 和空 XML 元素

转载 作者:可可西里 更新时间:2023-11-01 08:34:53 24 4
gpt4 key购买 nike

我有大量相当大的 XML 文件,我想将它们导入到 MySQL 表中。我正在运行 Centos 6.3 和 MySQL 5.6,我最初尝试过 5.5,但遇到了问题,后来发现 5.5 中有一个关于空 XML 标签的错误,所以我以为这已在 5.6 中得到解决,所以我选择了那个。

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

我有这张 table

    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 包含空标签,例如<sku />而不是 <sku></sku>没有处理而造成这种结果。

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

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

最佳答案

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

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

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

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

sh clean.sh

运行相同的 SQL 查询后:

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

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

希望这对某人有帮助。

关于MySQL 5.6 LOAD XML LOCAL INFILE 和空 XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16059537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com