Не так давно столкнулся с ситуацией, когда надо было дозаписывать записи в документ .xml.
Сам документ ничего особого с себя не представляет, примерно такой вот структуры:
Как видим Запись XML и несколько атрибутов, но не об этом….
Как же записать следующие записи такого типа?!
Некоторые решения ведут за собой чтение документа, перенос данных в ТЗ, к нему крепим следующую запись и потом опять создаем документ и записываем его….но…не хотел так делать и все)
Потому нашел вариант, который мне нравится и быстро работает - все через ПостроительDOM.
Не спорю, на большие количества записей он будет работать медленней, но в данной ситуации как раз по мне!
Что же нам нужно? Тут все просто, вначале прочитаем файл .xml:
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(Путь + ИмяФайла);
Построитель = Новый ПостроительDOM;
Документ = Построитель.Прочитать(ЧтениеXML);
ЧтениеXML.Закрыть();
Далее найдем нужный корень структуры .xml файла в который будет дозаписывать наши строки (к) из какого то источника, будь то ТЗ, структура и т.п. (в моем случае это будет «СтрокаСчета» в «ОстаткиБанковскиеСчета») и проведем запись новосозданной строки(к):
ТаблицаИсточник = Запрос.Выполнить().Выгрузить();
Корневой = Документ.ЭлементДокумента;
Для каждого Строка Из ТаблицаИсточник Цикл
Элемент = Документ.СоздатьЭлемент("СтрокаСчета");
Элемент.УстановитьАтрибут("Дата", Строка(ТекущаяДата()));
Элемент.УстановитьАтрибут("НаименованиеКомпании", Строка. Компания);
Элемент.УстановитьАтрибут("ЕРДПОУ", Строка.КодПоЕДРПОУ);
Элемент.УстановитьАтрибут("НазваниеБанка", Строка.Банк);
Элемент.УстановитьАтрибут("МФО", Строка.Банк.Код);
Элемент.УстановитьАтрибут("IBAN", Строка.НомерСчета);
Элемент.УстановитьАтрибут("Валюта", Строка.Валюта);
Элемент.УстановитьАтрибут("Сумма", Строка.СуммаОстаток);
Корневой.ДобавитьДочерний(Элемент);
КонецЦикла;
Ну и последний штрих - это записать уже отредактированный нами документ кодом типа:
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(Путь + ИмяФайла);
ЗаписьDOM = Новый ЗаписьDOM;
ЗаписьDOM.Записать(Документ, ЗаписьXML);
ЗаписьXML.Закрыть();
После получаем наш файл будет выглядеть так:
Надеюсь, кому то помогло.
Тестирование проводил на упр. формах УНФ выше 1.6.10.