gifts2017

Пример простого чтения сложного файла xml

Опубликовал Влад Шнурков (vladshnurkoff) в раздел Обработки - Обработка документов

Несколько рекурсивных функций и процедур, попутно загрузка документов.

Если использовать по прямому назначению, нужно пилить. Писалось под конкретные цели и для конкретной организации. Содержит  несколько процедур и функций, которые при прочтении нового файла автоматически расписывают необходимые для добавления процедуры загрузки. Удобство отладки обуславливается наличием своей процедуры под каждый элемент XML-дерева.

ПС: Сильно не пинайте, недавно совсем начал писать.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Файл обработки
.epf 31,06Kb
05.11.11
108
.epf 31,06Kb 108 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

0. Влад Шнурков (vladshnurkoff) 09.11.11 01:12
Несколько рекурсивных функций и процедур, попутно загрузка документов.

Перейти к публикации

1. Андрей Краснокутский (Andry.Boris) 09.11.11 01:12
2. Александр Лапшин (zfilin) 12.11.11 00:41
Прошу прощения, что влезаю со своими "пятью копейками", но я как раз наткнулся в рассылке на вашу публикацию сразу как собрался размещать свою. Посмотрите, возможно, вам это будет интересно: http://infostart.ru/public/98019/
3. denis leonov (curys) 21.12.11 11:59
4. Иван Иванов (jko) 01.02.12 10:58
Сам изучаю XML. Появилась потребность. Будем надеяться, что поможет. Спасибо.
5. Сергей (lsp71) 27.02.12 12:33
Для начинающих изучать XML. Для чтения из XML-файлов использую функцию ПрочитатьXMLфайл(ФайлХМЛ), преобразующую такой файл в ДеревоЗначений. А дальше непосредственно нужные данные из него читаю функцией ПолучитьЗначПарам(ИмяПараметра, Дерево). Назначение параметров и их типы понятны из комментариев. Просто и надежно.

Функция ПрочитатьXMLфайл(ФайлХМЛ) Экспорт ////////////////////////////////////////////////////////////­////////
// Ф-я возвращает ДеревоЗначений, прочитанное из XML-файла

//создаем ДЗн с нужными колонками:
дзДеревоХМЛ = Новый ДеревоЗначений;
дзДеревоХМЛ.Колонки.Добавить("ИмяПарам");
дзДеревоХМЛ.Колонки.Добавить("ЗначПарам");

//проверка существования файла:
Если НЕ ФайлХМЛ.Существует() Тогда
Сообщить("ПрочитатьXMLфайл: файл '" + ФайлХМЛ.ПолноеИмя + "' не существует!", СтатусСообщения.Важное);
отказ = Истина;
Возврат дзДеревоХМЛ; //возвращаем пустое ДЗн
КонецЕсли; //НЕ Файл.Существует()

Попытка
объектХМЛ = Новый ЧтениеXML();
объектХМЛ.ОткрытьФайл(ФайлХМЛ.ПолноеИмя); //открываем xml-файл для чтения
Исключение
Сообщить("Не удалось открыть для чтения файл '" + ФайлХМЛ.ПолноеИмя + "'", СтатусСообщения.Важное);
Возврат дзДеревоХМЛ; //возвращаем пустое ДЗн
КонецПопытки;

//------------------------------ читаем данные из XML-файла в ДеревоЗначений ---------------------------------
текСтроки = дзДеревоХМЛ.Строки;

Пока объектХМЛ.Прочитать() Цикл

Если объектХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
текСтрока = текСтроки.Добавить();
текСтрока.ИмяПарам = объектХМЛ.Имя;
текСтроки = текСтрока.Строки;

ИначеЕсли объектХМЛ.ТипУзла = ТипУзлаXML.Текст Тогда
Попытка
текСтроки.Родитель.ЗначПарам = ЗначениеИзСтрокиВнутр(объектХМЛ.Значение);
Исключение
текСтроки.Родитель.ЗначПарам = объектХМЛ.Значение;
КонецПопытки;

ИначеЕсли объектХМЛ.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Если текСтроки.Родитель.Родитель = Неопределено Тогда
текСтроки = текСтроки.Родитель.Строки;
Иначе
текСтроки = текСтроки.Родитель.Родитель.Строки;
КонецЕсли; //текСтроки.Родитель.Родитель = Неопределено

КонецЕсли; //объектХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента

Пока объектХМЛ.ПрочитатьАтрибут() Цикл
текСтрока = текСтроки.Добавить();
текСтрока.ИмяПарам = объектХМЛ.Имя;
текСтрока.ЗначПарам = объектХМЛ.Значение;
КонецЦикла; //Пока объектХМЛ.ПрочитатьАтрибут() Цикл

КонецЦикла; //Пока объектХМЛ.Прочитать() Цикл

объектХМЛ.Закрыть(); //закрываем открытый для чтения xml-файл

Возврат дзДеревоХМЛ; // возвращаем ДЗн с данными

КонецФункции // ПрочитатьXMLфайл(Файл) ////////////////////////////////////////////////////////////­///////////

функция ПолучитьЗначПарам(ИмяПараметра, Дерево) Экспорт //////////////////////////////////////////////////////
// Ф-я возвращает зн-е из колонки "ЗначПарам" строки ДЗн, в кот. в колонке "ИмяПарам" содержится ИмяПараметра.
//ИмяПараметра - строка - название того параметра, кот. надо извлечь.
//Дерево - ДЗн или строка ДЗн, в кот. надо искать. Если задана строка ДЗн, то поиск происходит только в ее пределах
//(только ей подчиненные строки).
// Если зн-е не найдено, то ф-я возвращает Неопределено.

Попытка
стрДЗ = Дерево.Строки.Найти(ИмяПараметра,"ИмяПарам", Истина);
Если стрДЗ <> Неопределено Тогда
Возврат СтрДЗ.ЗначПарам;
Иначе
Возврат Неопределено;
КонецЕсли; //стрДЗ <> Неопределено

Исключение
Возврат Неопределено; //в случае любой ошибки выполнения (например, Дерево не является ДЗн или строкой ДЗн)
КонецПопытки;
КонецФункции //ПолучитьЗначПарам(ИмяПараметра, Дерево) Экспорт ///////////////////////////////////////////////
nick_krsk; Поручик; HameleonA; +3 Ответить
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа