И ветер-память по ночам гудит,
Деревья-память целый день лепечут.
И там, в пернатой памяти моей,
Все сказки начинаются с "однажды".
Так вот, однажды мне пришлось переносить данные из базы на платформе 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. Впрочем, после непродолжительной борьбы данное препятствие было устранено. Применение обработки труда не составит. Надо выбрать файл приемник, указать вид справочника, который необходимо выгрузить и нажать кнопку Сформировать. По команде Структура выводится табличный документ с описанием реквизитов выбранного справочника.