Слияние XML-файла с таблицей MySQL - PullRequest
0 голосов
/ 08 апреля 2011

У меня есть 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 состоят из более чем 100 тыс. Строк, и я хотел бы запускать это обновление раз в неделю или около того ...

Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 08 апреля 2011

ЗАГРУЗИТЬ XML оператор + его предложение ЗАМЕНИТЬ в MySQL 5.5

Пример кода -

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

Другой способ - Инструмент импорта данных (выберите формат XML и режим добавления / обновления)

1 голос
/ 08 апреля 2011

Если вы не можете использовать оператор 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

Ваш текстовый файл станет таким

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

и вы сможете использовать оператор загрузки данных.

1 голос
/ 08 апреля 2011

Mysql имеет некоторую поддержку XML , начиная с версии 5.1. Несмотря на то, что формат xml отличается, его все же нужно начинать.

Честно говоря, затраты на итерацию этого xml-файла и выполнение INSERT ... ON DUPLICATE IT UPATE или REPLACE не так уж велики. Для анализа и обновления базы данных требуется менее часа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...