Форум программистов, компьютерный форум, киберфорум
PHP: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
12 / 12 / 1
Регистрация: 16.07.2012
Сообщений: 777

Как вытащить значение из файла выгрузки магазина

16.06.2016, 17:32. Показов 3152. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Имеется файл выгрузки xml от интернет-магазина. Он загружается ко мне на сайт автоматически, для чего я его и синхронизировал.
В этом файле выгрузки параметры хранятся в таком виде
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2016-06-14 19:57">
<shop>
 
<offers>
 
<offer id="82349" type="vendor.model" available="true">
<price>39180.00</price>
<currencyId>RUB</currencyId>
<categoryId>122</categoryId>
<picture>/upload/iblock/d5c/5225_tb_black_1.jpg</picture>
<picture>/upload/iblock/0f2/5225_tb_black_2.jpg</picture>
<picture>/upload/iblock/29d/5225_tb_black_3.jpg</picture>
<picture>/upload/iblock/c73/5225_tb_black_5.jpg</picture>
<picture>/upload/iblock/070/5225_tb_black_6.jpg</picture>
<name>5225_TB_BLACK Дорожная сумка VIP Collection</name>
<description>Дорожная сумка из натуральной кожи черного цвета на колесах с выдвижной ручкой. &lt;br /&gt;
Размеры - Длина 50 см, ширина 25 см, высота 35. Максимальная длина выдвижной ручки 50 см. Внутри имеется портплед из ткани и косметичка. Спереди два кармана на молнии. Сзади один карман на молнии</description>
<offer_group>g</offer_group>
<manufacture_artnumber>LS4630</manufacture_artnumber>
<flash></flash>
<video></video>
<param name="Скидка"></param>
<param name="Бренд">VIP Collection</param>
<param name="Материал">натуральная кожа</param>
<param name="Размер (габариты)">Длина 50 см, ширина 25 см, высота 35. Максимальная длина выдвижной ручки 50 см</param>
<param name="Модель"></param>
<param name="Цвет">черный</param>
<param name="Новинка"></param>
<param name="Страна-производитель"></param>
<param name="Артикул">LS4630</param>
<param name="Распродажа"></param>
<param name="BASE_NAME">Дорожная сумка</param>
<param name="BASE_ARTICLE">5225_TB_BLACK VIP Collection</param>
<param name="Sale">N</param>
<param name="Наполнитель"></param>
<param name="Размер одеяла"></param>
<param name="Размер наволочки"></param>
<param name="Размер простыни"></param>
<param name="Кол-во цветов"></param>
<param name="Стиль картинки"></param>
</offer>
 
 
</offers>
</shop>
</yml_catalog>
Для синхронизации вышеописанных параметров используется такой код (точнее его кусок), который мне не понятен

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
foreach($xml->shop->offers->children() as $offer) {
                $ibElement = new CIBlockElement;
                $rXML = array(
                "nm" => (string) $offer->name,          
                "id_" => (string) $offer["id"],
                "price" => (string) $offer->price2,             
                "img" => "",
                "manufacturer"=> "",
                "sku"=>(string) $offer->manufacture_artnumber,
                "description"=>(string) $offer->description         
                );
            
                $Pictures_ = (array) $offer->picture;
                $rXML[img] = $Pictures_[0];
                //if(trim($rXML[manufacturer]) == "" ) 
                    //$rXML[manufacturer] = "Handy brands";
                $rXML[nm]  =$rXML[nm]." ".$rXML[manufacturer]." ".$rXML[sku];
                $rXML[nm] = str_replace("  ", " ", $rXML[nm]);
                $rXML[nm]  =trim($rXML[nm] );
                $atr = $rXML[sku];          
                
                    if(trim($rXML[nm]) == "" )                   
                        continue;}
Там, где используется
XML
1
<manufacture_artnumber>LS4630</manufacture_artnumber>
, мне более-менее понятно, что делать.
А как вычленить то, что между >...< в
XML
1
<param name="Бренд">VIP Collection</param>
?
Т.е. в идеале $rXML[manufacturer] должен равняться "VIP Collection"

Заранее благодарен за помощь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.06.2016, 17:32
Ответы с готовыми решениями:

Вытащить значение из файла
Здравствуйте! Я новичок в php, делаю бота для телеграма, точнее ответы на команды. Все вопросы и ответы забиваются в CRM системе, затем...

Как вывести цвет товара в магазин из файла выгрузки (сайт на Битриксе)
Имеются два файла обработчика файлов выгрузки от поставщиков. Файл 1.php обрабатывает информацию так, что значение цвета товара передается...

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

25
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
16.06.2016, 23:17
Студворк — интернет-сервис помощи студентам
alanat, ять, вы явно издеваетесь...
Что показывает и какую ошибку?
Дерьмвёвер? выкиньте его.

Добавлено через 1 минуту
+ там еще фэйл с кодировкой, смотрите import-fixed.php
0
12 / 12 / 1
Регистрация: 16.07.2012
Сообщений: 777
16.06.2016, 23:21  [ТС]
Цитата Сообщение от Cra3y Посмотреть сообщение
этот должен работать
В строке 75 выдает ошибку.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?
 
 
$SYNC_TYPE = 'SYNC_ONLY';
$THIS_PRICE = 'trendybags';
 
ini_set('display_errors', 'On');
error_reporting(E_ALL);
set_time_limit(0);
include_once dirname(__FILE__) . '/td-bx/td-bx-utils.php';
$log = fopen(dirname(__FILE__) . '/xml_trendybags/' . date('d_m_Y_H_i') . '.log', 'w');
$FileXML = dirname(__FILE__) . '/xml_trendybags/temp/newXML_' . date('d_m_Y') . '.xml';
$priceVERSION = 'trendybags_' . date('d_m_Y_H_i');
function ut($txt)
{
    return mb_convert_encoding((string)$txt, "utf8", "cp1251");
}
 
function wi($txt)
{
    return mb_convert_encoding((string)$txt, "cp1251", "utf8");
}
 
function getColorsID($color_)
{
    if (trim($color_) != "") {
        $colorID = "";
        $property_enums = CIBlockPropertyEnum::GetList(Array("DEF" => "DESC", "SORT" => "ASC"), Array("IBLOCK_ID" => $IBLOCK_ID, "CODE" => "PROP4"));
        while ($enum_fields = $property_enums->GetNext()) {
            if (strcasecmp(trim(ut($enum_fields["VALUE"])), trim($color_)) == 0) {
                $colorID = $enum_fields["ID"];
                break;
            }
        }
        if (trim($colorID) == "") {
            $ibpenum = new CIBlockPropertyEnum;
            if ($PropID = $ibpenum->Add(Array('PROPERTY_ID' => "PROP4", 'VALUE' => $color_)))
                $colorID = $PropID;
        }
    }
    return $colorID;
}
 
$timeINT = time();
if (!empty($URL_FILE_1C)) {
 
    //$localImportFOTO = TDBXUtils::CopyRemoteFile("http://trendybags.ru/yandexmarket/73745316-50ca-4dc9-823d-c730ad4f1790.xml", dirname(__FILE__).'/xml_trendybags/temp/', true, 3600);
 
    $rez = file_get_contents($URL_FILE_1C);
    file_put_contents($FileXML, $rez);
    $out_ = 1;
    if (file_exists($FileXML)) {
        if (filesize($FileXML) > 0) {
            TDBXUtils::WriteLog(ut("Зупущен импорт файла :") . $FileXML, $log);
            /** @var SimpleXMLElement $xml */
            $xml = simplexml_load_file($FileXML);
 
            /** @var SimpleXMLElement $offer */
            foreach ($xml->shop->offers->children() as $offer) {
                $ibElement = new CIBlockElement();
                $rXML = array(
                    "nm" => (string)$offer->name,
                    "id_" => (string)$offer["id"],
                    "price" => (string)$offer->price,
                    "img" => "",
                    "manufacturer" => (string)$offer->vendor,
                    "sku" => (string)$offer->vendorCode,
                    "description" => (string)$offer->description,
                    "country" => (string)$offer->country_of_origin,
                    "color_" => (string)$offer->sales_notes
                );
 
                $Pictures_ = (array)$offer->picture;
                $rXML['img'] = $Pictures_[0];
                $rXML['manufacturer'] = (string) $offer->xpath(ut('param[@name="Бренд"]'))[0];
                if (trim($rXML['manufacturer']) == "")
                    $rXML['manufacturer'] = "Trendy Bags";
                $rXML['nm'] = $rXML['manufacturer'] . " " . $rXML['nm'] . " " . $rXML['sku'];
                $rXML['nm'] = str_replace("  ", " ", $rXML['nm']);
                $rXML['nm'] = trim($rXML['nm']);
                $atr = $rXML['sku'];
 
                if (trim($rXML['nm']) == "")
                    continue;
А если оставить $rXML['manufacturer'] = "Trendy Bags"; в строке 77, то значит, что вручную задается $rXML['manufacturer'], а не из файла выгрузки.

Добавлено через 3 минуты
Цитата Сообщение от Cra3y Посмотреть сообщение
alanat, ять, вы явно издеваетесь...
Что показывает и какую ошибку?
Дерьмвёвер? выкиньте его.
Добавлено через 1 минуту
+ там еще фэйл с кодировкой, смотрите import-fixed.php
Я файл сразу на хостинг кидаю, и сайт отваливается
0
12 / 12 / 1
Регистрация: 16.07.2012
Сообщений: 777
16.06.2016, 23:24  [ТС]
Скрин
Миниатюры
Как вытащить значение из файла выгрузки магазина  
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
16.06.2016, 23:36
alanat, мне этот скрин ни о чем не говорит...
Попробуйте этот
Вложения
Тип файла: 7z import-fixed.php.7z (3.4 Кб, 2 просмотров)
1
12 / 12 / 1
Регистрация: 16.07.2012
Сообщений: 777
16.06.2016, 23:46  [ТС]
Цитата Сообщение от Cra3y Посмотреть сообщение
Попробуйте этот
Вложенияimport-fixed.php.7z (3.4 Кб, 0 просмотров)
Да огромное спасибо! Заработало!
Я пытался сегодня что-то сделать с "foreach", понимая, что что-то похожее в коде есть, но что и как с этим делать не знал.
Спасибо.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
16.06.2016, 23:52
alanat, еще break добавьте, а то я забыл...
PHP
1
2
3
4
5
6
7
8
9
/** @var SimpleXMLElement $param */
                foreach ($offer->{'param'} as $param) {
                    /** @var string $name */
                    $name = wi((string) $param->attributes()->{'name'});
                    if ($name === 'Бренд') {
                        $rXML["manufacturer"] = wi((string)$param);
                        break; // <<< здесь
                    }
                }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.06.2016, 23:52

Как вытащить из ini-файла имя файла?
Кто знает, помогите плз. В макросе под Excel надо вытащить из ini-файла имя файла, чтобы потом его открыть в книгу Excel. Подскажите...

Как вытащить значение
python 2.* Отправил POST запрос. пришел ответ - bal print bal на экране {u'exchange': {u'BTC': u'0.00386807'}} как...

Как вытащить из строки значение?
Есть строка такого вида: подстроки типа &quot;request=3&quot; и &quot;action=11&quot; разделены табуляциями. Как мне получить значение &quot;11&quot;...

Как вытащить значение text?
Имеется динамическая таблица с возможностью добавления строк и в ячейках есть type=&quot;text&quot;; я могу добраться до этой ячейки вот...

Как вытащить значение из массива?
Честно говоря, я вообще не уверен что это массив. В общем я делаю запрос и получаю вот такой ответ. Отсюда надо вытащить то, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru