首页 > 解决方案 > 将嵌套的 XML 数据插入 mysql 数据库

问题描述

我有一个带有一些表和一些 .csv 和 .xml 文件的 mysql 数据库。我插入 csv 文件没有问题,但我的两个 .xml 文件有问题,因为它们具有嵌套属性。我知道如何使用 php 导入这些文件,但我希望只有一个 .sql 脚本导入我的所有文件。

我的 TABLE 看起来像这样

+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| UserID      | int(11)      | NO   | PRI | NULL    |       |
| LName       | varchar(256) | NO   |     | NULL    |       |
| FName       | varchar(256) | NO   |     | NULL    |       |
| UserPhoneNb | char(10)     | NO   |     | NULL    |       |
| City        | varchar(256) | NO   |     | NULL    |       |
| PostalCode  | char(4)      | NO   |     | NULL    |       |
| Street      | varchar(256) | NO   |     | NULL    |       |
| HouseNb     | int(11)      | NO   |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+

和这样的xml文件。

<users>
  <user>
    <ID>0</ID>
    <lastname>CROCHEMORE</lastname>
    <firstname>Abdel</firstname>
    <password>8308</password>
    <phone>0482642387</phone>
    <address>
      <city>Saint-Gilles</city>
      <cp>1060</cp>
      <street>rue Steens</street>
      <number>96</number>
    </address>
    <bankaccount>4506690518145656</bankaccount>
  </user>
  <user>
    <ID>1</ID>
    <lastname>BOURDON</lastname>
    <etc...>
  </user>
</users>

我最初尝试过这样的事情

LOAD XML LOCAL INFILE 'path/to/my/file.xml'
  INTO TABLE ChargeUsers
  ROWS IDENTIFIED BY '<user>'
  (@ID,@lastname,@firstname,@phone,@city,@cp,@street,@number)
  SET UserID=@ID, LNAME=@lastname, FName=@firstname, UserPhonNb=@phone,
      Street=@street, City=@city, PostalCode=@cp;

这确实适用于地址之外的所有字段,但不适用于地址内的字段。这是因为地址字段是嵌套的,它似乎不是mysql LOAD XML 文档中列出的三种不同格式之一。

是否有任何方法可以在纯 sql(没有 php)中做到这一点。或者有没有一种简单的方法来更改我的 xml 文件,以便它可以与 LOAD XML 一起使用?

(也许有一种方法使用ROWS IDENTIFIED BY '<address>'而不是'<user>'?)

标签: mysqlxmldatabasenested

解决方案


推荐阅读