MySQL使用标记名称和属性值作为列加载XML

时间:2017-05-17 13:00:24

标签: mysql xml-parsing

我在使用LOAD XML INFILE将XML加载到数据库表时遇到问题。我的XML文件的一个例子是:

<?xml version="1.0" encoding="UTF-8"?>
<ProductList>
  <Product>
    <SKU>ABC123</SKU>
    <Description>The product name</Description>
    <Images>
      <Name>ABC123.JPG</Name>
      <ImagePath Type="Large">path/to/large/ABC123.JPG</ImagePath>
      <ImagePath Type="Small">path/to/small/ABC123.JPG</ImagePath>
    </Images>
  </Product>
</ProductList>

我有一个数据库表定义为:

CREATE TABLE `images` (
  `SKU` varchar(25) NULL,
  `Name` varchar(100) NULL,
  `Large` varchar(100) NULL,
  `Small` varchar(100) NULL,
  KEY `Sku` (`SKU`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8

我正在使用以下查询加载:

LOAD XML INFILE '/path/to/xml'
INTO TABLE `images`
ROWS IDENTIFIED BY '<Images>';

它正在将Name值加载到表中,但不会填充Large和Small字段。在阅读MySQL文档时,看起来它可以支持读取属性作为列标题,但它没有指定它是否可以混合使用标记名称和属性值作为同一行集中的列名称。

https://dev.mysql.com/doc/refman/5.6/en/load-xml.html

有人可以帮忙吗?是否有可能从我的XML布局中读取图像信息到一个表中,每个记录有一行,填充名称,大和小的所有三个字段?

1 个答案:

答案 0 :(得分:0)

您的XML与LOAD XML INFILE可以读取的三种XML格式中的任何一种都不匹配。

您将不得不编写一个脚本来解析XML输入,读取嵌套标记以找到所需三个不同图像的路径,然后构造一个自定义INSERT语句来执行。