новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Чтение XML файла

  • Добавить свою публикацию
  • для этого требуется регистрация

В самом общем виде информация в xml файле представлена следующим образом.

<ИмяПоля атрибут1=”…” атрибут2=”…”> ЗначениеПоля.

Будем называть полями xml документа, как имя поля, так и имя атрибута. Цель состоит в том ,чтобы обойти все записи в xml файле и вернуть список его полей. Для решения данной задачи воспользуемся объектами, с помощью которых организована работа с объектной моделью документов (DOM). Кроме этого применим такой мощный механизм как рекурсия. И так первый шаг, чтение xml файла и формирование объекта типа ДокументDOM.

стек=новый массив;
чтение=Новый ЧтениеXML ;
чтение.ОткрытьФайл(сокрЛП(вхИмяФайла));
мДокументДОМ=мДОМ.Прочитать(чтение);

Следующее, что мы должны сделать – это обойти все записи в xml файле.Для этого воспользуемся таким объектом как ОбходДереваDOM.

мФильтр=новый ФильтрУзловDOM(,                                           
ПараметрыОтбораУзловDOM.ОтображатьЭлемент,                              
ПараметрыОтбораУзловDOM.ОтображатьАтрибут,
			,
			,
			,
			,
			ПараметрыОтбораУзловDOM.ОтображатьИнструкциюОбработки,,,,);
мОбходДерева=новый ОбходДереваDOM(мДокументДОМ,мРодитель,мФильтр);
тУзел=мОбходДерева.NextNode();
РекурсияXML(мОбходДерева,стек,мДокументДОМ);

Приведенный фрагмент заканчивается вызовом рекурсивной функции. Вот ее текст.

Функция РекурсияXML(вхОбход,выхДЗ,вхДокумент)
	тУзел=вхОбход.ТекущийУзел;
	если тУзел=Неопределено тогда
		возврат Ложь;
	конецесли;            
	мФильтр=новый ФильтрУзловDOM(,
	             ПараметрыОтбораУзловDOM.ОтображатьЭлемент,
	             ПараметрыОтбораУзловDOM.ОтображатьАтрибут,
	             ПараметрыОтбораУзловDOM.ОтображатьИнструкциюОбработки,,,,);

	пока тУзел<>неопределено цикл
		попытка
			мИмя=тУзел.ИмяЭлемента;
			если выхДЗ.Найти(мИмя)=Неопределено тогда                     ;
	            выхДЗ.Добавить(мИмя);
			конецесли;

			для каждого атрибут из тУзел.Атрибуты цикл
				мИмя=атрибут.Имя;
				если выхДЗ.Найти(мИмя)=Неопределено тогда
	                выхДЗ.Добавить(мИмя);
				конецесли;
			конеццикла;

		исключение
	        сообщить(ОписаниеОшибки());
		конецпопытки;



		мВложенноеДерево=новый    ОбходДереваDOM(вхДокумент,тУзел,мФильтр);

		Если мВложенноеДерево.FirstChild()<>Неопределено  тогда

			РекурсияXML(мВложенноеДерево,приемник,вхДокумент);

		конецесли;

		тУзел=вхОбход.NextSibling();

	конеццикла;        
	возврат Истина;

КонецФункции

На что надо обратить внимание в приведенном коде? Это то, что обход организован по двум уровням соседним (Sibling) узлам, и вложенным (Child). Изложенный механизм реализован в обработке Переходник, краткое описание, которой можно найти здесь (http://www.youtube.com/watch?v=Rdz_TTr3qGM)

 
0
Читайте также
Как из 1С правильно УКАЗАТЬ MS EXCEL как нужно печатать документы !
Как из MS Excel правильно печатать документы?
Копирование сведений для нового объекта
Как при копировании элемента по F9 на форме нового появлялись бы сразу цены копируемого элемента
Разработки
Обработка заполнение табличных частей документа. Написана для конфигурации УТ 11.0.6.9. Загружает информацию из файла Excel печа
Для конфигурации УТ 11.0.6.9 написана обработка для заполнения документа из файла Excel
Каталог с изображениями в Торговле
Как создать каталог с картинками в УТ 10.3
Как из 1С правильно УКАЗАТЬ MS EXCEL как нужно печатать документы !
Как правильно из 1С печатать документы .xml в EXCEL
Еще от автора
≡ к списку статей