We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 4036
    • 239 Posts
    Подскажите, пожалуйста, а есть ли снипет позволяющий импортировать данные из XML файла?

    Проблема в том, что со старого сайта надо перенести 2 000 позиций с описанием и фото. Вручную умотаешься :’( Но есть XML файлы...как бы облегчить мне работу, а?
      Портфолио - http://wowstudio.pro
      • 31309
      • 70 Posts
      Как альтернативу можете поискать конвертер xml --> csv , а для последнего есть решение в виде модуля.
        • 28814 ☆ A M B ☆
        • 1,086 Posts
        Quote from: Bredova at May 29, 2009, 02:09 PM

        Подскажите, пожалуйста, а есть ли снипет позволяющий импортировать данные из XML файла?
        Ох и нелегкая эта работа smiley Думаю, вряд ли найдется готовое решение, тем паче, что скорее всего у Вас новые данные будут храниться в отдельных своих таблицах, поэтому вероятнее всего придется писать свой сниппет.

        Как раз недавно был занят проблемой - заставить импортироваться в БД данные из XML файла размером около 150 Мб. Но там и элементов было под пару сотен тысяч с различной степенью вложенности. В Вашем случае должно быть попроще.

        Самые наглядные примеры использования PHP для парсинга XML файлов я нашел здесь http://www.ibm.com/developerworks/xml/library/x-xmlphp2.html

        Если позволите, небольшой ликбез smiley

        Существует два подхода для работы с XML в PHP:
        1. "tree" (дерево) - для относительно маленьких файлов, PHP полностью загружает файл в оперативную память веб-сервера и потом уже работает напрямую с деревом элементов этого файла.
        2. "stream" (поток) - PHP считывает небольшими порциями информацию и также частями обрабатывает данные.

        Выбирать Вам, в зависимости от того, какого объема файлы у Вас в наличии. Просто нужно иметь ввиду, что первый вариант может сильно перегрузить сервер, если попадется большого объема файл и/или Вам нужно проделывать множество операций с полученными данными. При использовании второго подхода нагрузка на сервер практически не ощущается, однако сам процесс парсинга и обработки может быть довольно длительным.

        Поскольку БД у меня была очень большого размера, я выбрал второй вариант, Simple API for XML (SAX). Он мне показался удобнее в моем случае. По-любому, Вам тоже скорее всего придется вначале поэкспериментировать smiley
          Разработка сайтов и программных модулей на MODX.
          Опыт работы на MODx с 2005 года. Высокое качество.
          Компания Baltic Design Colors: http://www.bdcolors.ru.
          • 16278
          • 928 Posts
          А может быть Вам пользоваится функциями SimpleXML (требуется PHP5). http://www.php.net/manual/ru/simplexml.examples-basic.php. При этом, погрузив файл XML, можно работать над данными в виде обычных массивов и объектов. Можно также использовать запросы Xpath, только трудно найти соответствующую информацию.
          cool KP
            • 17799
            • 23 Posts
            Вот есть код кому надо импорт RSS, XML в БД через MODx API:
            Прогонять обязательно через сниппет...
            <?php
            	$RSSS = array();
            	$RSSS[] = 'http://www.site.ru/news/rss/';
            	$RSSS[] = 'http://www.site.ru/xml/';
            foreach($RSSS AS $RSS) {	
            	$rss = simplexml_load_file($RSS);
            	
            		foreach($rss->channel->item as $item) {
            			
            			echo $item->title;
            			$result = mysql_fetch_object($modx->db->query("SELECT count(*) as CNT FROM modx_rmod_news WHERE title = '".$item->title."'"));
            			if(!$result->CNT) {
            				$fields = array (
            								'title' => $item->title,
            								'news_body' => $item->description,
            								'news_date' => $item->pubDate,
            								'autor' => $item->author,
            								'full_link' => 1,
            								'publish' => 1,
            								'catid' => 1,
                                );
            				$modx->db->insert($fields, $modx->getFullTableName(rmod_news));
            			} else {
            				//$modx->db->query("UPDATE ".$modx->getFullTableName(rmod_news)." SET ".$fields." WHERE title = '".$item->title."'";
            			}			
            		}
            }
            ?>
              • 19980 ☆ A M B ☆
              • 275 Posts
              Спасибо Друг!!
                modx and ecommerce pro