将XML文件与MySQL表合并

时间:2011-04-08 09:05:09

标签: mysql xml merge

我有XML文件,如下所示:

<?xml version="1.0"?>
<results>
  <row id="100"><name>name blah</name></row>
  <row id="200"><name>name blah blah</name></row>
  <row id="300"><name>name blah blah blah</name></row>
</results>

...还有一个简单的MySQL表:

CREATE TABLE `names` (
  `id` bigint(20) NOT NULL,
  `name` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我想以某种方式合并这两件事,用XML文件中的不存在的行更新我的表。

考虑到XML文件和MySQL表包含超过10万行,我希望每周运行一次这样的更新,这是实现这一目标的最简单,最轻松的方法。

非常感谢!

3 个答案:

答案 0 :(得分:2)

LOAD XML语句+ MySQL 5.5中的REPLACE子句

代码示例 -

LOAD XML LOCAL INFILE 'names.xml'
REPLACE
INTO TABLE names
ROWS IDENTIFIED BY '<row>';

另一种方式 - Data Import tool(选择XML格式和追加/更新模式)

答案 1 :(得分:1)

从v5.1起,Mysql有一些XML support。虽然xml格式不同,但它仍然是一个起点。

老实说,迭代该xml文件并执行INSERT ... ON DUPLICATE IT UPATEREPLACE的开销并不大。解析和更新数据库应该不到一个小时。

答案 2 :(得分:1)

如果您不能使用load xml语句,则可以使用powershell将xml文件转换为csv。

$destTXT = "c:\file.txt"
[xml]$xml = (gc c:\file.xml)
$xml.results.row |
select @{ L = 'ID';     E = { $_.id} },
       @{ L = 'Name';   E = { $_.name } } | export-csv $destTXT -NoTypeInformation
(gc $destTXT) -replace('"','') | Out-File $destTXT -Force

您的txt文件将成为此

ID,Name
100,name blah
200,name blah blah
300,name blah blah blah

您将能够使用加载数据语句。