Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Как прочитать одинаковые теги в XML          
burza Подменю пользователя
сообщение 29.06.23, 10:24
Сообщение #1

Оратор
*****
Группа: Пользователи
Сообщений: 312
Спасибо сказали: 1 раз
Рейтинг: 1

Есть файлик там есть одинаковые параметры типо image

<image>https://lido.ua/uploads/shop/products/origin/8cedb3f7-661e-11eb-8547-00155da30131.jpeg</image>
<image>https://lido.ua/uploads/shop/products/origin/additional/8cedb3f7-661e-11eb-8547-00155da30131_2.jpeg</image>

Когда прохожусь чтение берет в запись только последний а не по очереди, что не так?
Если   ЧтениеXML.Имя = "item" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда  //Определяем начало элемента
        
        НоваяСтрока = Объект.Данные.Добавить();

          ИначеЕсли ЧтениеXML.Имя = "image" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "image";
          Продолжить;
          //ИначеЕсли ЧтениеXML.Имя = "image" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          //ИмяТекущегоУзла = "image2";
        

    
      ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
          
          Если Если ИмяТекущегоУзла = "image" тогда
              НоваяСтрока.image = ЧтениеXML.Значение;
              //ИначеЕсли ИмяТекущегоУзла = "image2" тогда
              //НоваяСтрока.image2 = ЧтениеXML.Значение;

sava1 Подменю пользователя
сообщение 29.06.23, 10:40
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

сохранять все значения в список/массив ..... после окончания чтения узла решать, что с ними делать

burza Подменю пользователя
сообщение 29.06.23, 10:47
Сообщение #3

Оратор
*****
Группа: Пользователи
Сообщений: 312
Спасибо сказали: 1 раз
Рейтинг: 1

sava1 @ Сегодня, 11:40 * ,

там 100 000 записей не повиснет все если считать все сразу а не последовательно?)

вы про XDTO ?

Petre Подменю пользователя
сообщение 29.06.23, 11:04
Сообщение #4

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2905
Из: Київ, Україна
Спасибо сказали: 1147 раз
Рейтинг: 1228.9

burza @ Today, 10:24 * ,
Исходя из фрагмента вашего кода, вы создаете "НоваяСтрока" только один раз, и все последовательно прочитанные значения перезаписываете в поле одной строки. В итоге имеете только одну строку с последним значением.


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

burza Подменю пользователя
сообщение 29.06.23, 11:42
Сообщение #5

Оратор
*****
Группа: Пользователи
Сообщений: 312
Спасибо сказали: 1 раз
Рейтинг: 1

Petre @ Сегодня, 12:04 * ,
как правильно?

burza @ Сегодня, 12:10 * ,

вот полный. работает но вот когда одинаковые беда(

p.s как споил добавить?)
ИмяТекущегоУзла = "";
    
    Пока ЧтениеXML.Прочитать() Цикл  //Цикл по структуре
        
    Если   ЧтениеXML.Имя = "item" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда  //Определяем начало элемента
        
        НоваяСтрока = Объект.Данные.Добавить();
        Продолжить;
        
          ИначеЕсли ЧтениеXML.Имя = "id" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "id";
          Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "categoryId" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "categoryId";
           Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "vendorCode" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "vendorCode";
           Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "vendor" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "vendor";
           Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "name" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "name";
          Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "name_ru" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "name_ru";
          Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "description" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "description";
          Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "description_ru" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "description_ru";
          Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "BarCode" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "BarCode";
          Продолжить
          ИначеЕсли ЧтениеXML.Имя = "UCGFA" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "UCGFA";
          Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "price_main_val" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "price_main_val";
          Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "price_main" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "price_main";
          Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "price_rrc" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "price_rrc";
          Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "price" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "price";
          Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "price_val" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "price_val";
          Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "currency" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "currency";
          Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "rate" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "rate";
          Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "stock" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "stock";
          Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "image" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "image";
          Продолжить;
          //ИначеЕсли ЧтениеXML.Имя = "image" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          //ИмяТекущегоУзла = "image2";
          //Продолжить;
          ИначеЕсли ЧтениеXML.Имя = "param" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          ИмяТекущегоУзла = "param";
          //Продолжить;
          //ИначеЕсли ЧтениеXML.Имя = "param name=""" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          //ИмяТекущегоУзла = "param name=""";

    
      ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
          
          Если ИмяТекущегоУзла = "id" тогда
              НоваяСтрока.id = ЧтениеXML.Значение;
                ИначеЕсли ИмяТекущегоУзла = "categoryId" тогда
              НоваяСтрока.categoryId = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "vendorCode" тогда
              НоваяСтрока.vendorCode = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "vendor" тогда
              НоваяСтрока.vendor = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "name" тогда
              НоваяСтрока.name = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "name_ru" тогда
              НоваяСтрока.name_ru = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "description" тогда
              НоваяСтрока.description = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "description_ru" тогда
              НоваяСтрока.description_ru = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "BarCode" тогда
              НоваяСтрока.BarCode = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "UCGFA" тогда
              НоваяСтрока.UCGFA = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "price_main_val" тогда
              НоваяСтрока.price_main_val = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "price_main" тогда
              НоваяСтрока.price_main = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "price_rrc" тогда
              НоваяСтрока.price_rrc = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "price" тогда
              НоваяСтрока.price = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "price_val" тогда
              НоваяСтрока.price_val = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "currency" тогда
              НоваяСтрока.currency = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "rate" тогда
              НоваяСтрока.rate = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "stock" тогда
              НоваяСтрока.stock = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "image" тогда
              НоваяСтрока.image = ЧтениеXML.Значение;
              //ИначеЕсли ИмяТекущегоУзла = "image2" тогда
              //НоваяСтрока.image2 = ЧтениеXML.Значение;
              ИначеЕсли ИмяТекущегоУзла = "param" тогда
              НоваяСтрока.param = ЧтениеXML.Значение;
              //ИначеЕсли ИмяТекущегоУзла = "param name=""Маса, кг""" тогда
              //НоваяСтрока.Маса = ЧтениеXML.Значение;
              

                        
              КонецЕСли;
               Продолжить;

    ////Если это текст, читаем текст

    //ИначеЕсли ЧтениеXML.ТипУзла=ТипУзлаXML.КонецЭлемента Тогда

    ////Определяем дальнейшие действия

    КонецЕсли;

КонецЦикла;
ЧтениеXML.Закрыть();

burza Подменю пользователя
сообщение 30.06.23, 15:16
Сообщение #6

Оратор
*****
Группа: Пользователи
Сообщений: 312
Спасибо сказали: 1 раз
Рейтинг: 1

Сделал иначе но теперь вопрос другой подскажите как вытянуть ОбъектXDTO

Есть несколько параметров название их вытягиваю, а вот значение не пойму где






   Если ТипЗнч(Итем.param) = Тип("СписокXDTO") тогда //Если Итем.param = "СписокXDTO"  тогда
                  
                   Для Каждого Стр из Итем.param цикл
                      
                       Если Стр.name = "Розмір" тогда                  
                       НоваяСтрока.param = Стр.name;
                       // Для Каждого Стр из НоваяСтрока.param цикл
                       НоваяСтрока.param_1 = Стр;
                        //КонецЦикла;
                       ИначеЕсли Стр.name = "Маса, кг" тогда              
                       НоваяСтрока.param2 = Стр.name;              
                       ИначеЕсли Стр.name = "Ручка" тогда              
                       НоваяСтрока.param3 = Стр.name;
                       ИначеЕсли Стр.name = "Колір" тогда                  
                       НоваяСтрока.param4 = Стр.name;
                       ИначеЕсли Стр.name = "Тип товарів" тогда                  
                       НоваяСтрока.param5 = Стр.name;
                       //ИначеЕсли Стр.name = "Маса, кг" тогда                  
                       //НоваяСтрока.param2 = Стр.name;


                      
                           КонецЕсли;
                    Конеццикла;
                КонецЕсли;


burza @ Сегодня, 16:08 * ,
полный
 ЧтениеXML = Новый ЧтениеXML; 
    ЧтениеXML.ОткрытьФайл(Объект.ПутьКФайлу);
    
    Итем = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
    
    Для Каждого Итем из Итем.item Цикл
        
          НоваяСтрока = Объект.Данные.Добавить();
          
           НоваяСтрока.id = Итем.id;
           НоваяСтрока.categoryId = Итем.categoryId;
           НоваяСтрока.vendorCode = Итем.vendorCode;
           НоваяСтрока.vendor = Итем.vendor;
           НоваяСтрока.name = Итем.name;
           НоваяСтрока.name_ru = Итем.name_ru;
           НоваяСтрока.description = Итем.description;
           НоваяСтрока.description_ru = Итем.description_ru;
           НоваяСтрока.UCGFA = Итем.UCGFA;
           НоваяСтрока.price_main_val = Итем.price_main_val;
           НоваяСтрока.price_main = Итем.price_main;
           НоваяСтрока.price_rrc = Итем.price_rrc;
           НоваяСтрока.price = Итем.price;
           НоваяСтрока.price_val = Итем.price_val;
           НоваяСтрока.currency = Итем.currency;
           НоваяСтрока.rate = Итем.rate;
           НоваяСтрока.stock = Итем.stock;
           //НоваяСтрока.BarCode = Итем.BarCode;
            

             
          //////Список по параметрам///////////////
               Если ТипЗнч(Итем.param) = Тип("СписокXDTO") тогда //Если Итем.param = "СписокXDTO"  тогда
                  
                   Для Каждого Стр из Итем.param цикл
                      
                       Если Стр.name = "Розмір" тогда                  
                       НоваяСтрока.param = Стр.name;
                       // Для Каждого Стр из НоваяСтрока.param цикл
                       НоваяСтрока.param_1 = Стр;
                        //КонецЦикла;
                       ИначеЕсли Стр.name = "Маса, кг" тогда              
                       НоваяСтрока.param2 = Стр.name;              
                       ИначеЕсли Стр.name = "Ручка" тогда              
                       НоваяСтрока.param3 = Стр.name;
                       ИначеЕсли Стр.name = "Колір" тогда                  
                       НоваяСтрока.param4 = Стр.name;
                       ИначеЕсли Стр.name = "Тип товарів" тогда                  
                       НоваяСтрока.param5 = Стр.name;
                       //ИначеЕсли Стр.name = "Маса, кг" тогда                  
                       //НоваяСтрока.param2 = Стр.name;


                      
                           КонецЕсли;
                    Конеццикла;
                КонецЕсли;
            /////////////////////////////////////////////////////////////////

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 27.04.24, 13:38
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!