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

Обработки - Обработка документов

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

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

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

10

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

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

См. также

Комментарии
Сортировка: Древо
0. vladshnurkoff 83 09.11.11 01:12 Сейчас в теме
Несколько рекурсивных функций и процедур, попутно загрузка документов.

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

1. Andry.Boris 55 09.11.11 01:12 Сейчас в теме
2. zfilin 1955 12.11.11 00:41 Сейчас в теме
Прошу прощения, что влезаю со своими "пятью копейками", но я как раз наткнулся в рассылке на вашу публикацию сразу как собрался размещать свою. Посмотрите, возможно, вам это будет интересно: http://infostart.ru/public/98019/
3. 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файл(Файл) ////////////////////////////////////////////////////////////­///////////

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

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

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