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.НетПроверки));
ДОМ=ПострДОМ.Прочитать(ХМЛ);
ВывестиЭлем_ДОМ(ДОМ,"");
ХМЛ.Закрыть();
|
|