Ответов: 4 Просмотров: 3726
|
Доброго дня. Возникла необходимость обновлять БД через XML файл.
Файл обновляется каждые 3 часа. А значит и БД тоже должна так обновляться. XML большой 250 мегабайт.
Нашел в инете такойкод
PHP:
скопировать код в буфер обмена
$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 } $elements = $name; } // Вызывается, когда тег закрывается // если это тег offer - печатаем содержимое и вычищаем function endElements($parser, $name) { global $offer, $elements; global $mysqli; 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 ($elements == 'UID' || $elements == 'URL' ) { $offer[$elements] = trim($data); } } } // Собственно, подготавливаем парсер // открываем файл if (!($handle = fopen($filename1, "r"))) { die("could not open XML input"); } while($data = fread($handle, 4096)) // читаем по кусочкам { xml_parse($parser, $data); // и стравливаем парсеру } closeDB();
Вот пример XML
CODE ( htmlphp):
скопировать код в буфер обмена
<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. |