[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Перегнать XML в MySQL
vik7878
Доброго дня. Возникла необходимость обновлять БД через XML файл.
Файл обновляется каждые 3 часа. А значит и БД тоже должна так обновляться. XML большой 25 мегабайт.

Нашел в интернете код.
 
$filename1 = 'file/price3.xml';
ConnectDB();
$elements = null; // просто имя текущей ноды
$offer = null; // собирает один элемент offer
$mysqli->query("DELETE FROM offer_");
$mysqli->query("ALTER TABLE offer_ AUTO_INCREMENT=0");
// Вызывается, когда встречается открывающий тег.
// если это offer - создаем массив под него

function startElements($parser, $name, $attrs)
{
global $offer, $elements;
if ($name == 'OFFER') {//category
$offer = array();
}
$elements = $name;
}

// Вызывается, когда тег закрывается
// если это тег offer - печатаем содержимое и вычищаем

function endElements($parser, $name)
{
global $offer, $elements;
global $mysqli;

if(!empty($name)) {
if ($name == 'OFFER') {
$oUid= "$offer[UID]";
$oUrl= "$offer[URL]";


$mysqli->query("INSERT INTO offer_ (Uid_, Url_) VALUES ($oUid, '$oUrl')");

$offer = null;
}
$elements = null;
}
}


// Вызывается для текста, заполняем массив
function characterData($parser, $data)
{
global $offer, $elements;
if(!empty($data)) {
if ($elements == 'UID' || $elements == 'URL' ) {
$offer[$elements] = trim($data);
}
}
}


// Собственно, подготавливаем парсер

$parser = xml_parser_create();

xml_set_element_handler($parser, "startElements", "endElements");
xml_set_character_data_handler($parser, "characterData");

// открываем файл
if (!($handle = fopen($filename1, "r"))) {
die("could not open XML input");
}

while($data = fread($handle, 4096)) // читаем по кусочкам
{
xml_parse($parser, $data); // и стравливаем парсеру
}

xml_parser_free($parser); // почистим за собой.
closeDB();



Вот так примерно выглядит XML файл


<offer id="12">
<uid>
1234</uid>
<url>
jhgjhgjhg</url>
</offer>
<offer
id="13">
<url>
hjgujgjg</url>
<uid>
12345</uid>
</offer>



Все хорошо работает загрузка БД проходит менее чем за 2 мин.
Но у меня есть 2 вопроса:
1. Почему нужно в PHP писать теги (offer, uid, url) заглавными буквами. Иначе просто не работает.
2. Как вытащить id.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.