Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прочитать xml нужна помощь
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
alexkhua
Есть некий xml файл
 <?xml version="1.0" encoding="UTF-8" ?> 
- <Корневой Докумен="НарядЗаказ">
- <ЭлементДокументаНарядЗаказ>
  <НомерЗаказа>125/5</НомерЗаказа>
  <Дата>22.11.2012 23:08:44</Дата>
  <ТипИзделия>ПШ встроенный две двери горизонтальные</ТипИзделия>
  </ЭлементДокументаНарядЗаказ>
- <ЭлементДокументаНарядЗаказ>
  <НомерЗаказа>125/6</НомерЗаказа>
  <Дата>30.11.2012 11:35:25</Дата>
  <ТипИзделия>ПШ встроенный две двери горизонтальные</ТипИзделия>
  </ЭлементДокументаНарядЗаказ>
- <ЭлементДокументаНарядЗаказ>
  <НомерЗаказа>125/7</НомерЗаказа>
  <Дата>01.12.2012 12:00:00</Дата>
  <ТипИзделия>ПШ встроенный две двери горизонтальные</ТипИзделия>
  </ЭлементДокументаНарядЗаказ>
  </Корневой>


Нужно присвоить значения списку. Что я не так делаю?
 Процедура ПрочитатьXMLфайл(файлик)
//       
     ПутьКфайлу=файлик[0];
     Чтение = Новый ЧтениеXML;
     Чтение.ОткрытьФайл(ПутьКФайлу);
    
     СЗ= Новый СписокЗначений;

Пока Чтение.Прочитать() Цикл
       Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
        
        
        Чтение.ПрочитатьАтрибут()

        ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
        
        Если Чтение.Имя ="НомерЗаказа" Тогда
            СЗ.Добавить(Чтение.Значение);
        КонецЕсли;    
            
       // Сообщить("Текст:" + СЗ.Добавить(Чтение.Значение));
            
        Если Чтение.Имя ="Дата"    Тогда
            СЗ.Добавить(Чтение.Значение);
            
        //Сообщить("Текст:" + СЗ.Добавить(Чтение.Значение));
        КонецЕсли;
        Если Чтение.Имя ="ТипИзделия"    Тогда
            СЗ.Добавить(Чтение.Значение);
            
        //Сообщить("Текст:" + СЗ.Добавить(Чтение.Значение));
        КонецЕсли;
            
            

            

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

      // Сообщить("--Конец:" + Чтение.Имя);  

    КонецЕсли;

КонецЦикла;
   ВывестиЗначения(СЗ);
alexkhua
Мне нужно , чтоб для конкретного элемента присваивалось конкретное значение. А у меня присваевается отдному элемену списка значения все значения XML-файла. Т.е. Даже если я делаю вот так:
 Пока Чтение.Прочитать() Цикл 
       Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
        
        
        //Атрибут=Чтение.ПрочитатьАтрибут()

        ИначеЕсли Чтение.ТипУзла= ТипУзлаXML.Текст Тогда
        
        Если Чтение.Имя="НомерЗаказа" Тогда
            СЗ.Добавить(Чтение.Значение);
        КонецЕсли;    
            
       Сообщить("Текст:" + СЗ.Добавить(Чтение.Значение));

Всеравно перебираются все значения файла. Что-то неправильно в этом Условии:
Если Чтение.Имя="НомерЗаказа" Тогда
alex040269
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда 
        
        
       //Читаем имя узла

        ИначеЕсли Чтение.ТипУзла= ТипУзлаXML.Текст Тогда
        //Читаем значение
       //имя недоступно
alexkhua
Цитата(alex040269 @ 02.12.12, 20:02) необходимо зарегистрироваться для просмотра ссылки
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда 
        
        
       //Читаем имя узла

        ИначеЕсли Чтение.ТипУзла= ТипУзлаXML.Текст Тогда
        //Читаем значение
       //имя недоступно

Извините, не понял. Можно конкретно пример.
alexkhua
Ну вообщем Для данного файла нужно, например, выбрать строку "НомерЗаказа":
<?xml version="1.0" encoding="UTF-8" ?> 
- <Корневой>
- <ЭлементДокументаНарядЗаказ>
  <НомерЗаказа>125/5</НомерЗаказа>
  <Дата>22.11.2012 23:08:44</Дата>
  <ТипИзделия>ПШ встроенный две двери горизонтальные</ТипИзделия>
  </ЭлементДокументаНарядЗаказ>
- <ЭлементДокументаНарядЗаказ>
  <НомерЗаказа>125/6</НомерЗаказа>
  <Дата>30.11.2012 11:35:25</Дата>
  <ТипИзделия>ПШ встроенный две двери горизонтальные</ТипИзделия>
  </ЭлементДокументаНарядЗаказ>
- <ЭлементДокументаНарядЗаказ>
  <НомерЗаказа>125/7</НомерЗаказа>
  <Дата>01.12.2012 12:00:00</Дата>
  <ТипИзделия>ПШ встроенный две двери горизонтальные</ТипИзделия>
  </ЭлементДокументаНарядЗаказ>
  </Корневой>

Исправил код:



 Пока Чтение.Прочитать() Цикл 
    
    Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
        //Чтение.ПрочитатьАтрибут();
        
        Имя=Чтение.Прочитать();
        
                
        ИначеЕсли Чтение.ТипУзла= ТипУзлаXML.Текст Тогда
        
        Если Имя="НомерЗаказа" Тогда
        СЗ.Добавить(Чтение.Значение);
        

    КонецЕсли;
    Сообщить("Значение"+СЗ.Добавить(Чтение.Значение));
      

  КонецЕсли;
КонецЦикла;
  ВывестиЗначения(СЗ);

В итоге получил значение: 125/6 и 125/7. Куда делось 125/5? Подскажите пожалуйста, я уже не могу 47046430.gif
kivals
Попробуйте
Имя = Чтение.Имя;

вместо
Имя = Чтение.Прочитать();
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.