Я распарсил xml с
ФИАС-а. Интересен файл AS_ADDROBJ[что-то там].xml. Код:
$columns = ['formalname', 'shortname', 'aolevel', 'aoguid', 'parentguid', 'livestatus']; // поля подбираем под свою задачу
$xml = new XMLReader(); // SimpleXML не использовать ни в коем случае, он весь файл в оперативу грузит
$pdo = new PDO(/*свои настройки*/);
$q = "INSERT INTO `addrobjects` SET ";
foreach ($columns as $column) {
$q .= "`$column` = :$column,";
}
$stm = $pdo->prepare(rtrim($q, ','));
$xml->open(__DIR__ . '/addrobjects.xml');
while ($xml->read()) {
if ($xml->name == 'Object' and $xml->getAttribute("AOLEVEL") == 3 ) { // aolevel обозначает тип объекта, для городов он (ВРОДЕ БЫ) равен 3
foreach($columns as $column) {
$stm->bindValue($column, $xml->getAttribute(strtoupper($column)));
}
$stm->execute();
}
}
Мускулю перед этим скармливал
CREATE TABLE `addrobjects` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` int(10) unsigned DEFAULT NULL,
`formalname` varchar(120) NOT NULL,
`shortname` varchar(10) NOT NULL,
`aolevel` int(1) unsigned NOT NULL,
`livestatus` int(1) unsigned NOT NULL,
`aoguid` varchar(36) CHARACTER SET latin1 NOT NULL,
`parentguid` varchar(36) CHARACTER SET latin1 DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `parent_id` (`parent_id`),
UNIQUE KEY `aoguid` (`aoguid`),
KEY `parentguid` (`parentguid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
NB: запускать из консоли, у меня один регион выгребался 20+ минут