(1) можно использовать и чтение и xdto вот пример:
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если ЧтениеXML.Имя = "order" Тогда // Считываем Заказ в XDTO
ДанныеЗаказа = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
Если ДанныеЗаказа.status.title = "Получен складом" Тогда
// Обробатываем данные заказа
КонецЕсли
Иначе
ЧтениеXML.Прочитать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЧтениеXML.Закрыть();
(5)Можете не использовать XDTO, никто ж не заставляет.
Если файл большой, то лучше использовать ЧтениеXML, т.к. оно последовательно читает, а XDTO сразу весь файл загружает в память.
Причесать только код, чтобы нормально читалось в цикле.
(6)
будьте добры, скажите как прочитать "<param name="Тематика">Детская</param>"
в чтение.Имя вижу "param"; в чтение.значение="Детская" А как знать, что это "Тематика"?
(9)У меня есть вариант только для обработки реквизита ОбъектXDTO типа СписокXDTO:
Свойства = ОбъектXDTO.Свойства();
Для Каждого Свойство Из Свойства Цикл
Для Каждого ЭлементСписка Из ОбъектXDTO[Свойство.Имя] Цикл
СтрокаСвойство = СвойстваНоменклатуры.Добавить();
СтрокаСвойство.СвойствоИмя = ЭлементСписка.name;
СтрокаЗначение = ЗначенияСвойствНоменклатуры.Добавить();
СтрокаЗначение.ИдентификаторСтрокиСвойства = СтрокаСвойство.НомерСтроки;
КоличествоВПоследовательности = ЭлементСписка.Последовательность().Количество();
Если КоличествоВПоследовательности > 0 Тогда
СтрокаЗначение.ЗначениеИмя = ЭлементСписка.Последовательность().ПолучитьТекст(0);
КонецЕсли;
КонецЦикла;
КонецЦикла;
(11)Используя ЧтениеXML можно читать в цикле.
Переменная ПолныйПуть содержит путь читаемого элемента или атрибута.
Примерно так:
ПолныйПуть= "";
Пока ЧтениеXML.Прочитать() Цикл
// Обработка узла XML
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ПолныйПуть= ПолныйПуть+ "/" + ЧтениеXML.Имя;
Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда
Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
ЗначениеАтрибута = ЧтениеXML.Значение;
КонецЦикла
КонецЕсли
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
ЗначениеЭлемента = ЧтениеXML.Значение;
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
позУзла = Найти(ПолныйПуть+ "/", "/"+ЧтениеXML.Имя+"/");
Если позУзла >= 1 Тогда
ПолныйПуть= Лев(ПолныйПуть, позУзла - 1);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Показать
Можно добавить условие на имя читаемого атрибута/элемента и присваивать значение в нужные переменные.
(17) количество атрибутов в param =1!
<param name="Срок доставки">1 день</param>
<param name="Страна производителя">Россия</param>
<param name="Температурное ограничение">Нет</param>
<param name="Упаковка">Цветная</param>
<param name="Урожай">Август - Сентябрь</param>
<param name="Урожай">Апрель - Май</param>
<param name="Урожай">Декабрь - Январь</param>
<param name="Урожай">Июнь - Июль</param>
<param name="Урожай">Октябрь - Ноябрь</param>
<param name="Урожай">Февраль - Март</param>
<param name="ШК WB">6900039758276</param>
а атм их вот сколько!
Как тогда не понимаю.
Вот я получила
Если чтение.Имя = "param" Тогда
дальше что? name="Урожай" -я не вижу совсем, только ""Август - Сентябрь""
(20)Читаете атрибут у param и его значение, читаете значение элемента.
Далее в зависимости от значения атрибута присваиваете значение элемента в нужную переменную.
То есть каждый param читаете последовательно.
(23)
Пока Чтение.Прочитать() Цикл
Счетчик = Счетчик + 1;
если Счетчик > 0 Тогда
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если чтение.имя = "category" Тогда
ИД = 0; Наименование = ""; ПарентИд = 0;
Пока Чтение.ПрочитатьАтрибут() Цикл
Если чтение.Имя = "id" Тогда
Ид = чтение.Значение;
СТР = ТЗГрупп.Добавить();
СТР.ИД = Ид;
ИначеЕсли чтение.Имя = "parentId" Тогда
ПарентИд = чтение.Значение;
СТР.ПарентИд = ПарентИд;
КОнецЕсли;
КонецЦикла;
КонецЕсли;
Если чтение.имя = "offer" Тогда
ИДном = 0; Наименованиеном = ""; ПарентИдном = 0;
barcode = ""; shopsku = ""; description = ""; weight = "";
СТРНом = ТЗНоменклатура.Добавить();
Пока Чтение.ПрочитатьАтрибут() Цикл
Если чтение.Имя = "id" Тогда
ИДном = чтение.Значение;
СТРНом.ИД = Идном;
КонецЕсли;
КонецЦикла;
Пока НЕ (Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента и чтение.имя = "offer") и Чтение.Прочитать() Цикл
// Чтение.Прочитать()
Если не Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Если чтение.имя = "name" Тогда // вот ЗДЕСЬ нет значений из param, только полное наименование товара здесь
Чтение.Прочитать();
Наименованиеном = Чтение.Значение;
СТРНом.Наименование = Наименованиеном;
конецЕсли;
Если чтение.имя = "weight" Тогда
Чтение.Прочитать();
//Пока Чтение.ПрочитатьАтрибут() Цикл
weight = Чтение.Значение;
СТРНом.weight = weight;
//КонецЦикла;
конецЕсли;
Если чтение.Имя = "param" Тогда
Чтение.Прочитать();
//ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(чтение);
//Пока Чтение.ПрочитатьАтрибут() Цикл
ШКWB = чтение.Значение;
СТРНом.ШКWB = ШКWB;
//КонецЦикла;
КОнецЕсли;
Поток = Новый ЧтениеXML;
Поток.ОткрытьФайл(ИмяФайла);
Пока Поток.Прочитать() Цикл
Пока Поток.ТипУзла = ТипУзлаXML.НачалоЭлемента И Поток.Имя = "НужноеИмяТэгаОбъекта" Цикл
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(Поток);
// Обработка ОбъектXDTO
КонецЦикла;
КонецЦикла;
Если чтение.Имя = "param" Тогда
ЗначениеАтрибута = "";
Пока Чтение.ПрочитатьАтрибут() Цикл
Если Чтение.Имя = "name" Тогда
ЗначениеАтрибута = Чтение.Значение;
Прервать;
КонецЕсли;
КонецЦикла;
Чтение.Прочитать();
Если ЗначениеАтрибута = "ШК WB" Тогда //аналогично для других
ШКWB = чтение.Значение;
СТРНом.ШКWB = ШКWB;
КонецЕсли;
КОнецЕсли;
Если чтение.Имя = "param" Тогда
ЗначениеАтрибута = "";
Пока Чтение.ПрочитатьАтрибут() Цикл
Если Чтение.Имя = "name" Тогда
ЗначениеАтрибута = Чтение.Значение;
Сообщить("" + ЗначениеАтрибута);
Чтение.Прочитать();
ШКWB = чтение.Значение;
//вот так получается надо в ЗначенииАтрибута - "Штрикод Вайлдберриз", в ЧтениеЗначение - наконец тооооо сам штрихкод
Прервать;
КонецЕсли;
КонецЦикла;