Понадобилось тут мне для одного проекта получить список стран и их кодов (ISO-3166) в XML. У меня уже была база данных MySql, содержащая эти данные на нескольких языках. Сначала была мысль сделать XML вручную, ибо строк в каждой таблице было около 200. Посему просто сделал запрос в поисковике: "XML редактор". На первой же странице увидел редактор от Microsoft под названием "XML Notepad 2007". Скачал, поизучал. Штука оказалась потрясающе удобная. Останавливала только лень создавать около 400 узлов вручную
, и вероятность ошибки, которую легко допустить при составлении документа.
Имелась возможность экспорта таблицы из PhpMyAdmin, но данный экспорт не совсем годился для моей задачи и полученный XML пришлось бы нормализовать вручную. Решение пришло довольно быстро. Примерно 40 строк кода на Php, и готовый XML был уже в работе.
<?php
header("Content-Type: text/html; charset=UTF-8");
// header нужен для того, чтобы сообщить браузеру
// о используемой кодировке
//
// Здесь задаем параметры подключения к базе данных MySql
$dbhost = 'хост базы данных';
$dbuser = 'пользователь';
$dbpass = 'пароль';
$dbname = 'название базы данных';
// Начинаем формировать XML, который будет хранится в переменной $result
$result='<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<countries>
<english>
';
// Подключаемся к базе данных
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
mysql_select_db($dbname);
// Сообщаем MySql о кодировке
mysql_query("SET NAMES utf8;");
// Составляем запрос по выбору кода и названия страны из таблицы
$query = mysql_query("SELECT code, country FROM `worldip_land_en` ORDER BY country");
if ($query) {
// Затем в цикле разбираем запрос, и формируем XML
while ($row = mysql_fetch_array($query)) {
$result.=' <country name="'.$row['country'].'">
<code>'.$row['code'].'</code>
</country>
';
}
}
// Закрываем ноду "english" и открываем ноду "russian"
$result.=' </english>
<russian>
';
// Теперь все тоже, что и выше, только для таблицы, содержащей русские названия
$query = mysql_query("SELECT code, country FROM `worldip_land_ru` ORDER BY country");
if ($query) {
while ($row = mysql_fetch_array($query)) {
$result.=' <country name="'.$row['country'].'">
<code>'.$row['code'].'</code>
</country>
';
}
}
$result.=' </russian>
</countries>';
// Выводим результат на экран
echo $result;
?>
И все!!! От постановки задачи до реализации ушло около 15 минут. При том, что была исключена ручная работа и вероятность ошибки при составлении, была сэкономлена куча времени.
Код размещен плохо читаемым!
ОтветитьУдалитьЗдравствуй, дорогой анонимус. На момент публикации, а это было два года назад, всё было читаемым, с тех пор многое поменялось внутри этой блогоплатформы. Потому в шапке есть надпись «Блог переехал на asakasinsky.ru». Я попробовал на скорую руку поставить подсветку синтаксиса, так не совсем удалось, что подтвержает правильность переезда. Так что не обессудь.
Удалить