Имя: Пароль:
1C
1С v8
Порядок обхода XML (1с 82)
0 Mr_Best
 
30.12.11
13:45
С наступающим коллеги! В преддверии праздника пришлось зависнуть с чтением XML.

Инвентарь задачи:
Платформа: 1С:Предприятие 8.2.14.540
Файл: XML (версия 1.0)

Архитектура файла:
Корень "Данные"
-- Узел "Номенклатура"
---- Элемент "Номенклатура" Код= и т.д и т.п.
---- ....
---- Элемент "Номенклатура" Код= и т.д и т.п.
-- Узел "Цены"
-- .....
-- Узел "Остатки"

Вложенность данных = 3 уровня. (Узел корня => Узел списка => Узел элемента)

Задача:
Как обойти только узлы второго уровня? Или найти узел по наименованию? И вообще, кроме как обходить построчно весь документ XML что еще может 8.2.

Пользовался инструментом: "ЧтениеXML".
Пробывал подключать v7plus.dll - не удалось.

Как просто и удобно можно перебрать XML в 8.2? (желательно так же удобно как v7plus.dll)
1 andrewks
 
30.12.11
13:48
Функция ВывестиЭлем_ДОМ(ДОМ,Знач Смещ);
   
   Рез=1;
   Попытка
       ТипУзла=ДОМ.ТипУзла;
       Если (ТипУзла=ТипУзлаDOM.Документ) Тогда
           ;
       ИначеЕсли (ТипУзла=ТипУзлаDOM.Элемент) Тогда
           Смещ=Смещ+"    ";
           Сообщить(Смещ+"Элемент "+ДОМ.ИмяУзла+":",СтатусСообщения.Важное);
           
           Для каждого ТекАтр из ДОМ.Атрибуты Цикл
               Сообщить(Смещ+"Атрибут: "+ТекАтр.ИмяУзла+", значение: <"+ТекАтр.ЗначениеУзла+">");
           КонецЦикла;
       ИначеЕсли (ТипУзла=ТипУзлаDOM.Текст) Тогда
           Сообщить(Смещ+"Текст элемента: <"+ДОМ.ЗначениеУзла+">");
       ИначеЕсли (ТипУзла=ТипУзлаDOM.СекцияCDATA) Тогда
           Сообщить(Смещ+"CDATA: <"+ДОМ.ЗначениеУзла+">");
       ИначеЕсли (ТипУзла=ТипУзлаDOM.Комментарий) Тогда
           Сообщить(Смещ+"Комментарий: <"+ДОМ.ЗначениеУзла+">",СтатусСообщения.Информация);
       Иначе
           Сообщить(Смещ+"Элемент "+ДОМ.ИмяУзла+":");
           Сообщить(Смещ+"Тип: "+ДОМ.ЗначениеУзла);
       КонецЕсли;
       
       Для каждого ТекУзел из ДОМ.ДочерниеУзлы Цикл
           ВывестиЭлем_ДОМ(ТекУзел,Смещ);
       КонецЦикла;
   Исключение
       Сообщить(ОписаниеОшибки());
       Рез=0;
   КонецПопытки;
   
   Возврат Рез;
КонецФункции



   ПострДОМ=Новый ПостроительDOM;
   ХМЛ=Новый ЧтениеXML;
   ХМЛ.ОткрытьФайл(ИмяФайла,Новый ПараметрыЧтенияXML(,,,ТипПроверкиXML.НетПроверки));
   ДОМ=ПострДОМ.Прочитать(ХМЛ);
   
   ВывестиЭлем_ДОМ(ДОМ,"");
   ХМЛ.Закрыть();
2 Mr_Best
 
30.12.11
13:56
Хороший подарочек на новый год ))))) Спасибо.