X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Импорт данных из xml в базу данных сайта
yury_mw
yury_mw
Topic Starter сообщение 16.6.2011, 15:45; Ответить: yury_mw
Сообщение #1


Я в базах данных не силен, а тут возникла задача:
Есть xml-файл, содержащий много много структурированной информации вида
[xml]<?xml version="1.0" encoding="windows-1251" ?>
<blocks>
<block>
<id>id1</id>
<date>Дата1</date>
<title>Заголовок1</title>
<link>Ссылка1</link>
</block>
<block>
<id>id2</id>
<date>Дата2</date>
<title>Заголовок2</title>
<link>Ссылка2</link>
</block>
...
</blocks>[/xml]
Вопрос: как эту информацию проще всего перегнать в базу данных сайта?
Типа, создать табличку blocks с полями id, date, title, link и перекачать в нее все данные из исходного файла.
Ну чтоб не вручную вбивать.
На сайте стоит phpMyAdmin.

Есть подозрение, что должны быть некие средства автоматизации этого процесса. Но гугл в поисках не помог. ;)
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 16.6.2011, 16:39; Ответить: matroskin8
Сообщение #2


Вроде с версии 5.1 MySQL имеется поддержка работы с XML. А так я бы написал скрипт, используя, к примеру, класс SimpleXMLElement - получаем данные из XML и помещаем их в БД.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
almatar
almatar
сообщение 16.6.2011, 17:03; Ответить: almatar
Сообщение #3


Это надо наверно в пхпмайамине через вкладку SQL запросы писать типа insert тотото, или как вы упомянули ручками всё создавать. Короч я не програмёр, бес его знает :D
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yury_mw
yury_mw
Topic Starter сообщение 16.6.2011, 18:01; Ответить: yury_mw
Сообщение #4


(matroskin8 @ 16.6.2011, 16:39) *
А так я бы написал скрипт, используя, к примеру, класс SimpleXMLElement - получаем данные из XML и помещаем их в БД.

matroskin8
Напишите, если не сложно. Я с этим делом не сталкивался.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 16.6.2011, 18:17; Ответить: matroskin8
Сообщение #5


В принципе, не сложно. Если вытащить данные из XML в массив будет достаточно? Думаю, затем из массива загонять данные в БД не составит проблемы. Если успею, то сегодня напишу, если нет - завтра.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yury_mw
yury_mw
Topic Starter сообщение 16.6.2011, 18:36; Ответить: yury_mw
Сообщение #6


(matroskin8 @ 16.6.2011, 18:17) *
Если вытащить данные из XML в массив будет достаточно?

Думаю, да. Дальше я справлюсь.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 16.6.2011, 19:03; Ответить: matroskin8
Сообщение #7


Ну и отлично :D
В принципе, быстренько набросал. Думаю, все должно быть понятно - код старался максимально комментировать. Даже тестово поместил в БД - все работает. Единственное - это возможная проблема с кодировками... XML не очень дружит с кириллицей, лучше работать с юникодом. Код тестировал - все работает.
XML:
[xml]<?xml version="1.0" encoding="utf-8" ?>
<blocks>
<block>
<id>id1</id>
<date>Дата1</date>
<title>Заголовок1</title>
<link>Ссылка1</link>
</block>
<block>
<id>id2</id>
<date>Дата2</date>
<title>Заголовок2</title>
<link>Ссылка2</link>
</block>
</blocks>[/xml]
PHP:
[php]<?php

mysql_connect("localhost", "root", "") or die("No connect to server");
mysql_select_db("test") or die("No select DB");
mysql_query("set names 'utf-8'");

/* функция дебага массивов */
function arr($arr){
echo '<pre>';
print_r($arr);
echo '</pre>';
}

$file = 'file.xml'; // файл XML
$read = simplexml_load_file($file); // получаем объект класса

//arr($read); // распечатываем массив $read

$xml = $read->block; // $xml - объект-массив, вложенные теги - его свойства

$count = count($xml); // кол-во элементов массива

for($i = 0; $i < $count; $i++){

echo "<p>Ряд для таблицы с id - {$i}</p>";
echo $xml[$i]->id. '<br />'; // вывод id
echo $xml[$i]->date. '<br />'; // вывод date
echo $xml[$i]->title. '<br />'; // вывод title
echo $xml[$i]->link. '<br />'; // вывод link
/* можно поместить в привычные переменные */
$id_xml = $xml[$i]->id;
$date_xml = $xml[$i]->date;
$title_xml = $xml[$i]->title;
$link_xml = $xml[$i]->link;

/* заносим данные в БД */
$res = mysql_query("INSERT INTO `xml` SET
`id_xml`='{$id_xml}',
`date_xml`='{$date_xml}',
`title_xml`='{$title_xml}',
`link_xml`='{$link_xml}'");
}

?>[/php]


Поблагодарили: (0)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yury_mw
yury_mw
Topic Starter сообщение 16.6.2011, 21:02; Ответить: yury_mw
Сообщение #8


(matroskin8 @ 16.6.2011, 19:03) *
Ну и отлично :D
В принципе, быстренько набросал. Думаю, все должно быть понятно - код старался максимально комментировать. Даже тестово поместил в БД - все работает. Единственное - это возможная проблема с кодировками... XML не очень дружит с кириллицей, лучше работать с юникодом. Код тестировал - все работает.

matroskin8,
спасибо, все получилось
Правда пришлось помучиться с кодировками, пока не пришло в голову заменить
[php]mysql_query("set names 'utf-8'");[/php]на
[php]mysql_query("set names 'utf8'");[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 16.6.2011, 22:03; Ответить: matroskin8
Сообщение #9


А, точно - эт я уже ошибся в запросе с кодировкой :D
Кстати, надо будет проверить завтра и дописать в запрос условие:
[php]mysql_query("set names 'utf-8'") or die("Can't set charset");[/php]
Интересно выведет ли ошибку с такой записью...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 17.6.2011, 10:58; Ответить: matroskin8
Сообщение #10


Проверил... условие или срабатывает при такой записи:
[php]mysql_query("set names 'utf-8'") or die("Can't set charset");[/php]
и выводится сообщение о невозможности установить кодировку соединения. Вот что значит не проверять такие простенькие запросы - а я обычно никогда и не проверяю их... теперь будет мне наука :D

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыБыстрая индексация страниц сайта и обратных ссылок - 2Index
32 2Index 5488 Вчера, 16:33
автор: 2Index
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыПродам базу сайтов Wordpress в 16 миллионов доменов! Свежая сборка.
17 Boymaster 9278 17.3.2024, 2:53
автор: Boymaster
Открытая тема (нет новых ответов) Интеграция спортивных данных API. Коэффициенты БК, Live результаты
14 yaroslav89 6540 13.3.2024, 23:16
автор: spoyer_ru
Открытая тема (нет новых ответов) Перенос сайта на CMS Wordpress
8 freeax 4792 10.3.2024, 14:58
автор: freeax
Открытая тема (нет новых ответов) Какой % отказов нормален для сайта?
9 Aloof 2360 8.3.2024, 20:41
автор: ZerKuS


 



RSS Текстовая версия Сейчас: 19.3.2024, 13:03
Дизайн