Работаем с XML используя ЧтениеXML и ЗаписьXML Примеры кода для Записи данных в XML файл и его последующего Чтения:
Код 1C v 8.3 &НаКлиенте
Функция ВывестиЭлем(ХМЛ,Знач Смещ) ;
Рез= 1 ;
Попытка
Пока ХМЛ. Прочитать( ) Цикл
ТипУзла= ХМЛ. ТипУзла;
Если ( ТипУзла= ТипУзлаXML. НачалоЭлемента) Тогда
Смещ= Смещ+ " " ;
Сообщить( Смещ+ "Элемент " + ХМЛ. Имя+ ":" , СтатусСообщения. Важное) ;
Пока ( ХМЛ. ПрочитатьАтрибут( ) ) Цикл
Сообщить( Смещ+ "Атрибут: " + ХМЛ. Имя+ ", значение: <" + ХМЛ. Значение+ ">" ) ;
КонецЦикла ;
ИначеЕсли ( ТипУзла= ТипУзлаXML. КонецЭлемента) Тогда
Смещ= Лев( Смещ, СтрДлина( Смещ) - 4 ) ;
ИначеЕсли ( ТипУзла= ТипУзлаXML. Текст) Тогда
Сообщить( Смещ+ "Текст элемента: <" + ХМЛ. Значение+ ">" ) ;
ИначеЕсли ( ТипУзла= ТипУзлаXML. СекцияCDATA) Тогда
Сообщить( Смещ+ "CDATA: <" + ХМЛ. Значение+ ">" ) ;
ИначеЕсли ( ТипУзла= ТипУзлаXML. Комментарий) Тогда
Сообщить( Смещ+ "Комментарий: <" + ХМЛ. Значение+ ">" , СтатусСообщения. Информация) ;
Иначе
Сообщить( Смещ+ "Элемент " + ХМЛ. Имя+ ":" ) ;
Сообщить( Смещ+ "Тип: " + ХМЛ. Значение) ;
КонецЕсли ;
КонецЦикла ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
Рез= 0 ;
КонецПопытки ;
Возврат Рез;
КонецФункции
&НаКлиенте
Процедура ВыгрузитьХМЛ(ИмяФайла) Экспорт
ХМЛ= Новый ЗаписьXML;
ХМЛ. ОткрытьФайл( ИмяФайла, Новый ПараметрыЗаписиXML( "windows-1251" , , Ложь , Ложь ) ) ;
ХМЛ. ЗаписатьОбъявлениеXML( ) ;
ХМЛ. ЗаписатьНачалоЭлемента( "Файл" ) ;
ХМЛ. ЗаписатьАтрибут( "Атрибут_Файл_1" , "Здесь содержимое Атрибут_Файл_1" ) ;
ХМЛ. ЗаписатьТекст( "Здесь содержимое Файл" ) ;
ХМЛ. ЗаписатьКомментарий( "Далее следует содержимое файла" ) ;
ХМЛ. ЗаписатьНачалоЭлемента( "СодержимоеФайла" ) ;
ХМЛ. ЗаписатьАтрибут( "Атрибут_СодержимоеФайла_1" , "Здесь содержимое Атрибут_СодержимоеФайла_1" ) ;
ХМЛ. ЗаписатьТекст( "Здесь содержимое СодержимоеФайла" ) ;
ХМЛ. ЗаписатьСекциюCDATA( "Это секция CDATA" ) ;
ХМЛ. ЗаписатьКонецЭлемента( ) ;
ХМЛ. ЗаписатьКонецЭлемента( ) ;
ХМЛ. Закрыть( ) ;
ХМЛ= Неопределено ;
ХМЛ= Новый ЧтениеXML;
ХМЛ. ОткрытьФайл( ИмяФайла, Новый ПараметрыЧтенияXML( , , , ТипПроверкиXML. НетПроверки) ) ;
ВывестиЭлем( ХМЛ, "" ) ;
ХМЛ. Закрыть( ) ;
ХМЛ= Неопределено ;
КонецПроцедуры
Категория:
JSON, XML, TXT, CSV, DBF Обмен между базами через XML (создается ФабрикаXDTO) В процедурах выгрузки/загрузки создается ФабрикаXDTO из схемы, которая хранится в макете как файл. Файл настроек схемы надо использовать один и тот же в обработках Загрузки/Выгрузки
Из Фабрики создается объект, его заполняю выгружаемыми данными
Фабрику сохраняю в XML. В процедуре загрузки из читаю фабрику из XML и пробегаю по объектам
Очень удобно!
Код 1C v 8.х Функция СоздатьФайлСхемы()
ФайлСхемы = Новый Файл( КаталогВременныхФайлов( ) + "schema.xsd" ) ;
Если ФайлСхемы. Существует( ) Тогда
УдалитьФайлы( ФайлСхемы. ПолноеИмя) ;
КонецЕсли ;
Ссылка = ПолучитьМакет( "schema_xsd" ) ;
Ссылка. Записать( ФайлСхемы. ПолноеИмя) ;
Возврат ФайлСхемы. ПолноеИмя;
КонецФункции
Функция ВыгрузитьДокументы()
ФайлыXSD = Новый Массив( ) ;
ФайлыXSD. Добавить( СоздатьФайлСхемы( ) ) ;
Фабрика = СоздатьФабрикуXDTO( ФайлыXSD) ;
ФайлОбмена = Фабрика. Создать( Фабрика. Тип( "http://anton.fly7.ru" , "ФайлОбмена" ) ) ;
Пока Выборка. Следующий( ) Цикл
Документ = Фабрика. Создать( Фабрика. Тип( "http://anton.fly7.ru" , "Документ" ) ) ;
Документ. ID = Строка( Док. УникальныйИдентификатор( ) ) ;
Документ. ВидДокумента = Док. Метаданные( ) . Имя;
Документ. Дата = Док. Дата;
Документ. Номер = Док. Номер;
Документ. Статус = ? ( Док. Проведен, "Проведен" , ? ( Док. ПометкаУдаления, "ПометкаУдаления" , "НеПроведен" ) ) ;
Документ. Комментарий = Док. Комментарий;
КонецЦикла
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML( "UTF-8" , "1.0" , Ложь ) ;
МойXML = Новый ЗаписьXML;
МойXML. ОткрытьФайл( ИмяФайла, ПараметрыЗаписиXML) ;
МойXML. ЗаписатьОбъявлениеXML( ) ;
Фабрика. ЗаписатьXML( МойXML, ФайлОбмена) ;
МойXML. Закрыть( ) ;
ОбщегоНазначенияКлиентСервер. СообщитьПользователю( "Создан файл обмена " + ИмяФайла) ;
КонецФункции
Процедура ЗагрузитьДокументы()
ФайлыXSD = Новый Массив( ) ;
ФайлыXSD. Добавить( СоздатьФайлСхемы( ) ) ;
Фабрика = СоздатьФабрикуXDTO( ФайлыXSD) ;
ФайлОбмена = Фабрика. Создать( Фабрика. Тип( "http://anton.fly7.ru" , "ФайлОбмена" ) ) ;
ОбменXML = Новый ЧтениеXML;
ОбменXML. ОткрытьФайл( ИмяФайла) ;
ФайлОбмена = Фабрика. ПрочитатьXML( ОбменXML, Фабрика. Тип( "http://anton.fly7.ru" , "ФайлОбмена" ) ) ;
Для Каждого Документ Из ФайлОбмена. Документ Цикл
ОбработкаПрерыванияПользователя( ) ;
Если Документ. ВидДокумента = "ПоступлениеТоваров" И
ЗначениеЗаполнено( Поставщик) И
Документ. Контрагент. ИНН Поставщик. ИНН Тогда
КонецЕсли ;
КонецЦикла
ФайлОбмена = "" ;
ОбменXML. Закрыть( ) ;
УдалитьФайлы( ИмяФайла) ;
КонецПроцедуры
Файл схемы примерно такой (разукрашка съела скобки, но смысл должен быть понятен ))
Код xs:schema xmlns:tns="http://anton.fly7.ru" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://anton.fly7.ru" attributeFormDefault="unqualified" elementFormDefault="qualified">
xs:complexType name="ФайлОбмена">
xs:sequence>
xs:element name="Документ" type="tns:Документ" nillable="true" maxOccurs="unbounded"/>
xs:sequence>
xs:complexType>
xs:complexType name="Документ">
xs:sequence>
xs:element name="ID" type="xs:string"/>
xs:element name="ВидДокумента" type="xs:string"/>
xs:element name="Статус" type="xs:string"/>
xs:element name="Дата" type="xs:dateTime"/>
xs:element name="Номер" type="xs:string"/>
xs:element name="Контрагент" type="tns:Контрагент"/>
xs:element name="Свойства" type="tns:ТаблицаСвойства" nillable="true" minOccurs="0"/>
xs:sequence>
xs:complexType>
xs:complexType name="Контрагент">
xs:sequence>
xs:element name="ID" type="xs:string"/>
xs:element name="Наименование" type="xs:string"/>
xs:element name="ИНН" type="xs:string"/>
xs:sequence>
xs:complexType>
xs:complexType name="ТаблицаСвойства">
xs:sequence>
xs:element name="СтрокаСвойства" type="tns:СтрокаСвойство" nillable="true" maxOccurs="unbounded"/>
xs:sequence>
xs:complexType>
xs:complexType name="СтрокаСвойство">
xs:sequence>
xs:element name="Наименование" type="xs:string" nillable="true"/>
xs:element name="Значение" type="xs:string" nillable="true"/>
xs:sequence>
xs:complexType>
xs:schema>
Автор:
Абазин Антон Категория:
WEB-сервисы, WS-ссылки, XDTO-пакеты