gifts2017

Выгрузка в xml файл с правильным форматированием

Опубликовал Валерий (scientes) в раздел Обмен - Обмен через XML

Пример форматирования xml текста с помощью таблицы стилей. Данный прием позволяет добиться "правильного" форматирования xml данных при работе с объектной моделью документа. А именно, заменить представление в виде одной строки
<Body> <Records><Record>текст</Record></Records></Body>,
на
<Body>
<Records>
<Record>текст</Record>
</Records>
</Body>

И ветер-память по ночам гудит,
Деревья-память целый день лепечут.

И там, в пернатой памяти моей,
Все сказки начинаются с "однажды".

 

Так вот, однажды мне пришлось переносить данные из базы на платформе 1С:Предприятие 7.7. Первый этап, как обычно, состоял в экспорте-импорте справочников. В качестве средства обмена выступал файл в формате xml. Запись и последующее чтение было реализовано через объект Msxml2.DOMDocument.  

xmlDOM=СоздатьОбъект("Msxml2.DOMDocument.3.0"); 
xmlDOM.async=0;
	
Header = xmlDOM.createProcessingInstruction("xml", "version=""1.0"" encoding=""windows-1251""" );  
xmlDOM.appendChild(Header);   
Body = xmlDOM.createElement(name);    
xmlDom.appendChild(Body);  


В приведенном фрагменте кода  создается объект xmlDOM и  формируется  секция заголовка будущего файла, в который добавляется корневой элемент Body, содержащий всю выводимую информацию. В дальнейшем создание  новых записей происходит через вызов двух функций - createElement(...) и appendChild(...). Когда xml документ заполнен, он сохраняется в виде внешнего файла вызовом метода Save(...).

Последовательность действий несложная. Но если открыть полученный файл, то окажется, что все данные представлены одной длинной строкой. А это, откровенно говоря, неудобно. Возникает вполне законный вопрос, как привести информацию к удобному виду.  

Оказывается, что я не первый, кто столкнулся с этой проблемой. В русскоязычном разделе Сети вопросов "что в этом случае делать?" значительно больше чем ответов.  На самом деле, решение единственное - заменить последовательность символов >< на последовательность >[символ переноса строки]<. Никаких иных способов мне не встречалось. А вот замену можно провести по разному.

Один из способов состоит в применении к подготовленному xml тексту таблицы стилей, которая фактически является набором команд по преобразованию исходного представления в нужное. Делается такое преобразование одной командой - xmlDOM.transformNodeToObject(...). Секрет состоит в содержании таблицы стилей. В описании я его приводить не буду, для этого понадобится заглянуть в модуль обработки и найти функцию Function Transform(doc,path). Данное решение я встретил на англоязычном сайте, за что автору спасибо.

Но это еще не все, используя данный метод я обнаружил, что преобразованный текст сохраняется в кодировке UTF-16. Впрочем, после непродолжительной борьбы данное препятствие было устранено. Применение обработки труда не составит. Надо выбрать файл приемник, указать вид справочника, который необходимо выгрузить и нажать кнопку Сформировать. По команде Структура выводится табличный  документ с описанием реквизитов выбранного справочника.

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

Наименование Файл Версия Размер Кол. Скачив.
Выгрузка справочника в xml формате
.ert 193,50Kb
11.12.15
1
.ert 193,50Kb 1 Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа