|
Чтение XML. | ☑ | ||
---|---|---|---|---|
0
Balabass
05.12.11
✎
10:26
|
Товарищи! Нужна помощь и ссылки.
Написал на клюшках выгрузку справочника в XML. Структура примерно вот такая: -Элемент -Атрибут -Атрибут -Атрибут -Элемент -Атрибут -Атрибут Теперь встал вопрос про загрузку всего этого дела в 8. Поиск юзал - не помогло особо. Подскажите - как прочитать XML в 8? Дайте готовый код для разбора на дому? Либо ссылку на пример. Все будет изучено. И закреплено на практике! :) |
|||
1
Filipf
05.12.11
✎
10:27
|
Очень много примеров в инете. Лень искать? Щас все полезут ссылки искать)))
|
|||
2
Axel2009
05.12.11
✎
10:29
|
ЧтениеXML
|
|||
3
Balabass
05.12.11
✎
10:31
|
(1) Это только так кажеться что полно. Но они все специфические.
(2) Читаю ЖЖК, но хотелось бы увидеть живой пример. |
|||
4
vicof
05.12.11
✎
10:31
|
Используй КД, Люк.
|
|||
5
Maxus43
05.12.11
✎
10:32
|
через 5 минут не поленюсь - выложу пример чтения хмл произвольной структуры
|
|||
6
Balabass
05.12.11
✎
10:34
|
(4)КД не подходит для моих нужд. Я с начала руками научиться хочу.
|
|||
7
Balabass
05.12.11
✎
10:34
|
(5) Буду премного благодарен.
|
|||
8
Maxus43
05.12.11
✎
10:37
|
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ПутьКФайлу); Пока Чтение.Прочитать() Цикл // Прочитать «структурные части» элементов. // Проверить, какая часть элемента – текущая. Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда ИмяУзла = Чтение.Имя; Сообщить("--" + ИмяУзла); // Атрибуты элементов можно читать только если текущая часть – начало элемента Пока Чтение.ПрочитатьАтрибут() Цикл // Прочитать данные узла атрибута. ТипУзла = Чтение.ТипУзла; Имя = Чтение.Имя; Значение = Чтение.Значение; // Обработать полученные значения. // ... КонецЦикла; ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда // В примере просто выводим текст в окно сообщений. Сообщить("Текст:" + Чтение.Значение); ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда // В примере просто выводим признак конца элемента // в окно сообщений Сообщить("--Конец:" + Чтение.Имя); КонецЕсли; КонецЦикла (с) Простые примеры разработки |
|||
9
Balabass
05.12.11
✎
10:37
|
Например вот код:
<?xml version="1.0" encoding="windows-1251"?> <Сотрудники> <Элемент Код="00004969" Наименование="Договорники" ЭтоГруппа="1"/> <Элемент Код="00006755" Наименование="Иванов Иван Иванович" Родитель="00004969" ЭтоГруппа="0" АдресФакт="" АдресПрописка=",123456,Саха /Якутия/,,Угоян с,Лесная ул,1,," Гражданство="" ДатаРождения="27.10.59" СтраховойНомерПФР="000-000-000 00" КодИМНС="" ДокТипДокумента="Паспорт гражданина России" ДокНомер="00 00" ДокСерия="000000" ДокКогдаВыдан="14.04.2005" ДокКемВыдан="ПОМ РС(Я)" ИНН="140220326124" Пол="Мужской"/> </Сотрудники> Как его прочиать в ТЗ? |
|||
10
Balabass
05.12.11
✎
10:38
|
(8) Спасибо.
|
|||
11
БибиГон
05.12.11
✎
10:42
|
а где код выгрузки из 7ки?
|
|||
12
Balabass
05.12.11
✎
10:49
|
(11) На месте)
|
|||
13
БибиГон
05.12.11
✎
10:50
|
(12) жадничаешь? )
|
|||
14
Balabass
05.12.11
✎
10:51
|
(13) Надо?
|
|||
15
Сияющий Асинхраль
05.12.11
✎
10:58
|
В кд 2 на порядок быстрее - за пол часа и выгрузка и загрузка, тем более речь идет, фактически, об одном справочнике
|
|||
16
БибиГон
05.12.11
✎
10:59
|
(14) да )
|
|||
17
Balabass
05.12.11
✎
11:01
|
(15) Да. Но не умею. Потихоньку учусь.
|
|||
18
Balabass
05.12.11
✎
11:02
|
(15)+Я хочу понять как протекает сам процесс загрузки. Как данные анализируются. + еще надо заменять элементы существующие, а не существующие добавлять. И еще по мелочи.
|
|||
19
Balabass
05.12.11
✎
11:03
|
2(16)
перем xml_fso; перем xml_file; перем xml_СтекТегов; перем xml_ТегОткрыт; перем xml_Отступы; перем прм_ИмяФайла; перем стрИмяФайла; /////////////////////////////////////////////////////////////////////// //Открывает файл XML в режиме записи. Если файл существовал, перезаписывает его. //Принимает параметр прм_ИмяФайла - имя файла (укажите полный путь и расширение .XML) Процедура xml_СоздатьФайл(прм_ИмяФайла) xml_fso=СоздатьОбъект("Scripting.FileSystemObject"); xml_file=xml_fso.CreateTextFile(прм_ИмяФайла, -1, 0); //создать файл, перезаписывая существующий. xml_file.WriteLine("<?xml version=""1.0"" encoding=""windows-1251""?>"); //Пишем заголовок XML. xml_СтекТегов=СоздатьОбъект("СписокЗначений"); xml_Отступы=""; xml_ТегОткрыт=0; КонецПроцедуры /////////////////////////////////////////////////////////////////////// //Записывает начало элемента (тега XML). Имя можно указывать в угловых скобках. Процедура xml_ЗаписатьНачалоЭлемента(прм_ИмяТега) перем стр; Если xml_ТегОткрыт=1 Тогда xml_ТегОткрыт=0; xml_file.WriteLine(">"); xml_Отступы=xml_Отступы+" "; КонецЕсли; стр=прм_ИмяТега; стр=СтрЗаменить(стр, "<", ""); стр=СтрЗаменить(стр, ">", ""); xml_СтекТегов.ДобавитьЗначение(стр); xml_file.Write(xml_Отступы+"<"+стр); xml_ТегОткрыт=1; КонецПроцедуры /////////////////////////////////////////////////////////////////////// //Записывает атрибут (параметр) тега XML. Процедура xml_ЗаписатьАтрибут(прм_ИмяАтрибута, прм_ЗначениеАтрибута) Если xml_ТегОткрыт=0 Тогда Сообщить("Перед записью атрибута необходимо записать начало элемента!","!"); а=10/0; КонецЕсли; стр=СокрЛП(прм_ЗначениеАтрибута); стр=СтрЗаменить(стр, "&", "&"+"a"+"m"+"p"+";"); стр=СтрЗаменить(стр, """", "&"+"q"+"u"+"o"+"t;"); стр=СтрЗаменить(стр, "<", "&"+"l"+"t"+";"); стр=СтрЗаменить(стр, ">", "&"+"g"+"t"+";"); стр=СтрЗаменить(стр, "'", "&"+"a"+"p"+"o"+"s;"); xml_file.Write(" "+прм_ИмяАтрибута+"="+""""+стр+""""); КонецПроцедуры // xml_ЗаписатьЗаписатьАтрибут /////////////////////////////////////////////////////////////////////// //Записывает конец элемента (тега XML). Имя закрываемого тега можно указывать в угловых скобках, //а можно - не указывать вовсе. Процедура xml_ЗаписатьКонецЭлемента(прм_ОжидаемоеИмяТега="") перем стрИмяТега, а; Если xml_СтекТегов.РазмерСписка()<1 Тогда Сообщить("Попытка закрыть неоткрытый элемент!","!"); а=10/0; КонецЕсли; стрИмяТега=xml_СтекТегов.ПолучитьЗначение(xml_СтекТегов.РазмерСписка()); Если ПустаяСтрока(прм_ОжидаемоеИмяТега)=0 Тогда стр=прм_ОжидаемоеИмяТега; стр=СтрЗаменить(стр, "<", ""); стр=СтрЗаменить(стр, ">", ""); стр=СтрЗаменить(стр, "/", ""); Если стр<>стрИмяТега Тогда Сообщить("Ожидается имя тега "+стр+", а закрыто "+стрИмяТега,"!"); а=10/0; КонецЕсли; КонецЕсли; xml_СтекТегов.УдалитьЗначение(xml_СтекТегов.РазмерСписка()); Если xml_ТегОткрыт=1 Тогда xml_ТегОткрыт=0; xml_file.WriteLine("/>"); Возврат; КонецЕсли; xml_Отступы=лев(xml_Отступы, СтрДлина(xml_Отступы)-2); xml_file.WriteLine(xml_Отступы+"</"+стрИмяТега+">"); КонецПроцедуры // xml_ЗаписатьКонецЭлемента /////////////////////////////////////////////////////////////////////// //Закрывает открытый файл XML. После окончания работы с файлом его необходимо закрыть. Функция xml_Закрыть() xml_file.Close(); Если xml_СтекТегов.РазмерСписка()<>0 Тогда Сообщить("Имеются незакрытые элементы XML!","!"); а=10/0; КонецЕсли; КонецФункции // xml_Закрыть /////////////////////////////////////////////////////////////////////// //Процедура записи XML документа для наших данных Процедура ПриОткрытии() // Сообщить("Начало записи: "+стрИмяФайла); // Сообщить("Время начала: "+ТекущееВремя()); xml_СоздатьФайл(стрИмяФайла); xml_ЗаписатьНачалоЭлемента("<Сотрудники>"); спр=СоздатьОбъект("Справочник.Сотрудники"); спр.ВыбратьЭлементы(); Пока спр.ПолучитьЭлемент()=1 Цикл xml_ЗаписатьНачалоЭлемента("<Элемент>"); xml_ЗаписатьАтрибут("Код", спр.Код); xml_ЗаписатьАтрибут("Наименование", СокрЛП(спр.Наименование)); Если ПустоеЗначение(спр.Родитель) = 0 Тогда xml_ЗаписатьАтрибут("Родитель", спр.Родитель.Код); КонецЕсли; Если спр.ЭтоГруппа()=1 Тогда xml_ЗаписатьАтрибут("ЭтоГруппа", "1"); Иначе xml_ЗаписатьАтрибут("ЭтоГруппа", "0"); xml_ЗаписатьАтрибут("АдресФакт", спр.АдресФакт); xml_ЗаписатьАтрибут("АдресПрописка", спр.АдресПрописка); xml_ЗаписатьАтрибут("Гражданство", спр.Гражданство); xml_ЗаписатьАтрибут("ДатаРождения", спр.ДатаРождения); xml_ЗаписатьАтрибут("СтраховойНомерПФР", спр.СтраховойНомерПФР); xml_ЗаписатьАтрибут("КодИМНС", спр.КодИМНС); Если ПустоеЗначение(спр.ДокументУдЛичность)= 0 Тогда списокДокументУдЛичность = глРазложитьДокУдостоверяющийЛичность(спр.ДокументУдЛичность); Если списокДокументУдЛичность.РазмерСписка() = 5 тогда xml_ЗаписатьАтрибут("ДокТипДокумента",списокДокументУдЛичность.ПолучитьЗначение(1)); xml_ЗаписатьАтрибут("ДокНомер",списокДокументУдЛичность.ПолучитьЗначение(2)); xml_ЗаписатьАтрибут("ДокСерия",списокДокументУдЛичность.ПолучитьЗначение(3)); xml_ЗаписатьАтрибут("ДокКогдаВыдан",списокДокументУдЛичность.ПолучитьЗначение(4)); xml_ЗаписатьАтрибут("ДокКемВыдан",списокДокументУдЛичность.ПолучитьЗначение(5)); КонецЕсли; xml_ЗаписатьАтрибут("ИНН", спр.ИНН); xml_ЗаписатьАтрибут("Пол", спр.Пол); КонецЕсли; КонецЕсли; xml_ЗаписатьКонецЭлемента("</Элемент>"); КонецЦикла; xml_ЗаписатьКонецЭлемента("</Сотрудники>"); xml_Закрыть(); ФС.ПереименоватьФайл(стрИмяФайла,"\\server\Archiv1C\sinhron\obmen\Сотрудники.xml",1); ФС.УдалитьФайл(стрИмяФайла); Форма.Закрыть(0) КонецПроцедуры стрИмяФайла="C:\Spisok.xml"; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |