Здравствуйте, пожалуйста не ругайте сильно, но я у вас Новенький. Суть проблемы в следующем, пытаюсь написать парсер расписания поездов на php. Есть xml файл http://train.votpusk.ru/xml_utf/2000000.xml Код (Text): $file = "http://train.votpusk.ru/xml_utf/2000000.xml"; function parse($file, $from, $to){ $content = file_get_contents($file); $pos = strpos($content, $from); $content = substr($content, $pos); $pos = strpos($content, $to); $content = substr($content, 0, $pos); $content = str_replace('< a href= >','',$content); preg_match_all('!<numb>(.*?)</numb>!si', $content, $out, PREG_PATTERN_ORDER); return $out[0]; } foreach ($parse as $link){ echo $link.'< br />'; //Так же здесь я буду записывать все полученные данные в БД. } В пхп почти не шарю =( помогите написать нормальный парсер. спасибо.
почему у меня белая страница? Код (Text): <?php #$file = "http://train.votpusk.ru/xml_utf/2048090.xml"; function callMe($param) { # $search = array('byUsername' => 'dynsql'); # if (isset($search[$param[1]])) { return sprintf($param[2], $search[$param[1]]); # } return ""; } $xml = simplexml_load_file("http://train.votpusk.ru/xml_utf/2000000.xml"); $string = $xml->statement->asXML(); $string = preg_replace_callback('/<numb>(.*?)<\/numb>/', 'callMe', $string); $node = simplexml_load_string($string); echo $node; ?>
} Забыли в конце function callMe сделать так: # } И вообще, что-за чушь вы написали, оно не будет работать. Код (PHP): $xml=simplexml_load_file("http://train.votpusk.ru/xml_utf/2000000.xml"); foreach($xml->station->date->train as $value) { echo nl2br($value->numb.' '); }
Подскажите пожалуйста, сейчас вытаскиваются все данные кроме дат, это потому что даты находятся не в элементе train, если убрать train из foreach то даты вытаскиваются нормально, пытался сделать вот так Код (Text): $xml=simplexml_load_file("http://train.votpusk.ru/xml_utf/2000000.xml"); foreach($xml->station->date as $value2) { #echo $value2->day; #echo $value2->train->numb; $day = nl2br($value2->day.''); $month = nl2br($value2->month.''); $year = nl2br($value2->year.''); $numb = nl2br($value2->train->numb.''); $type = nl2br($value2->train->type.''); $dep_station = nl2br($value2->train->dep_station.''); $arr_station = nl2br($value2->train->arr_station.''); $arr_time = nl2br($value2->train->arr_time.''); $date_start = date("Y-m-d"); $db->setQuery("INSERT INTO schedule (`day`, `month`, `year`, `numb`, `type`, `dep_station`, `arr_station`, `arr_time`, `date_start`) VALUES ('{$day}', '{$month}', '{$year}', '{$numb}', '{$type}', '{$dep_station}', '{$arr_station}', '{$arr_time}', '{$date_start}')"); $db->query(); } Что посоветуете?
Сделал вот такой вот вариант Код (Text): foreach ($xml->station->date->train as $value) { $numb = nl2br($value->train->numb.''); $type = nl2br($value->train->type.''); $dep_station = nl2br($value->train->dep_station.''); $arr_station = nl2br($value->train->arr_station.''); $arr_time = nl2br($value->train->arr_time.''); $date_start = date("Y-m-d"); $db->setQuery("INSERT INTO #__schedule (`day`, `month`, `year`, `numb`, `type`, `dep_station`, `arr_station`, `arr_time`, `date_start`) VALUES ('{$day}', '{$month}', '{$year}', '{$numb}', '{$type}', '{$dep_station}', '{$arr_station}', '{$arr_time}', '{$date_start}')"); $db->query(); $query ='SELECT id FROM #__schedule ORDER BY id DESC LIMIT 1'; $db->setQuery($query); $end_rf = $db->loadObject(); foreach ($xml->station->date as $value2) { $day = nl2br($value2->day.''); $month = nl2br($value2->month.''); $year = nl2br($value2->year.''); $db->setQuery("UPDATE #__schedule SET day='$day', month='$month', year='$year' WHERE id='$end_rf' LIMIT 1"); $db->query(); } } Но почему то не работает =( пишет Catchable fatal error: Object of class stdClass could not be converted to string in /home/data/www/components/com_schedule/views/crons/tmpl/default.php on line 45 Хелп ми. Добавлено спустя 36 секунд: Жалуется на Код (Text): $db->setQuery("UPDATE #__schedule SET day='$day', month='$month', year='$year' WHERE id='$end_rf' LIMIT 1"); Строчку.
Код (PHP): $xml=simplexml_load_file("http://train.votpusk.ru/xml_utf/2000000.xml"); foreach($xml->station->date as $keyDate => $valueDate) { echo nl2br('Day: '.$valueDate->day.' Month: '.$valueDate->month.' Year: '.$valueDate->year.' '); if(is_object($valueDate->train)) { foreach($valueDate->train as $keyTrain => $valueTrain) { echo nl2br('Numb: '.$valueTrain->numb.' Type: '.$valueTrain->type.' '); } } }
Подскажите пожалуйста, пытаюсь сделать запись в бд. вот мой код Код (Text): foreach($xml->station->date as $keyDate => $valueDate) { $day = nl2br($valueDate->day); $month = nl2br($valueDate->month); $yeat = nl2br($valueDate->year); $db->setQuery("INSERT INTO #__schedule (`day`, `month`, `year`) VALUES ('{$day}', '{$month}', '{$year}')"); $db->query(); if(is_object($valueDate->train)) { foreach($valueDate->train as $keyTrain => $valueTrain) { $query ='SELECT id FROM #__schedule ORDER BY id DESC LIMIT 1'; $db->setQuery($query); $end_rf = $db->loadObject(); $numb = nl2br($valueTrain->numb); $type = nl2br($valueTrain->type); $dep_station = nl2br($valueTrain->dep_station); $arr_station = nl2br($valueTrain->arr_station); $arr_time = nl2br($valueTrain->arr_time); $date_start = nl2br($valueTrain->date_start); $db->setQuery("UPDATE #__schedule SET numb='$numb', type='$type', dep_station='$dep_station', arr_station='$arr_station', arr_time='$arr_time', date_start='$date_start' WHERE id='$end_rf' LIMIT 1"); $db->query(); } } } Пишет Catchable fatal error: Object of class stdClass could not be converted to string in /home/components/com_schedule/views/crons/tmpl/default.php on line 45 Жалуется на эту строчку Код (Text): db->setQuery("UPDATE #__schedule SET numb='$numb', type='$type', dep_station='$dep_station', arr_station='$arr_station', arr_time='$arr_time', date_start='$date_start' WHERE id='$end_rf' LIMIT 1"); Подскажите что я не так делаю? где я туплю? 100% моя неопытность...
Этж, <матное слово>. Я валяюсь =) Вы бы сначала прочитали бы, что за функция nl2br, на какой хрен ее писать к каждой переменной ? ОМГ! И даже такое повидать приходится =) Извращенец Скорее проблема в $end_rf = $db->loadObject(); // объект, который не конвертируется в строку. И делайте экранирование за место nl2br напишите (mysql | mysqli)_real_escape_string - смотря, что вы там используете ( mysql или mysqli ) рекомендую mysqli. Хотя $db->есть видимо уже экранирование строк. Найдите это.